Идентификационная функция, как определено в https://en.wikipedia.org/wiki/Identity_function,, принимает один аргумент и возвращает его без изменений:
def identity(x):
return x
То, что вы запрашиваете, когда говорите, что хотите, чтобы подпись def identity(*args)
была , а не , была строго тождественной функцией, поскольку вы хотите, чтобы она принимала несколько аргументов. Это нормально, но затем вы сталкиваетесь с проблемой, так как функции Python не возвращают несколько результатов, поэтому вам нужно найти способ объединить все эти аргументы в одно возвращаемое значение.
Обычный способ возврата «множественных значений» в Python - это возврат кортежа значений - технически это одно возвращаемое значение, но его можно использовать в большинстве контекстов, как если бы это были множественные значения. Но, делая это здесь, вы получаете
>>> def mv_identity(*args):
... return args
...
>>> mv_identity(1,2,3)
(1, 2, 3)
>>> # So far, so good. But what happens now with single arguments?
>>> mv_identity(1)
(1,)
И исправление этой проблемы быстро приводит к другим проблемам, как показали различные ответы здесь.
Итак, в итоге, в Python не определена функция идентификации, потому что:
- Формальное определение (функция с одним аргументом) не так уж полезно, и написать его тривиально.
- Распространение определения на несколько аргументов в целом не является четко определенным, и вам гораздо лучше определить свою собственную версию, которая работает так, как вам нужно для вашей конкретной ситуации.
Для вашего точного случая,
def dummy_gettext(message):
return message
почти наверняка то, что вы хотите - функция, которая имеет такое же соглашение о вызовах и возвращает как gettext.gettext
, которая возвращает свой аргумент без изменений и имеет четкое имя для описания того, что она делает и где она предназначена для использования. Я был бы очень шокирован, если бы производительность была решающим фактором здесь.