Функция идентификации, как определено в 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
почти наверняка то, что вы хотите - функция, которая имеет то же соглашение о вызовах и return gettext.gettext, что и возвращает свой аргумент без изменений и имеет четкие имена для описания того, что она делает и где она предназначена для использования. Я был бы очень шокирован, если бы производительность была решающим фактором здесь.
map and filter use None for the identity?