Funkcja tożsamości, zgodnie z definicją podaną w https://en.wikipedia.org/wiki/Identity_function , pobiera pojedynczy argument i zwraca go w niezmienionej postaci:
def identity(x):
return x
To, o co prosisz, mówiąc, że chcesz, aby podpis, niedef identity(*args) jest ściśle funkcją tożsamości, ponieważ chcesz, aby przyjmowała wiele argumentów. W porządku, ale potem napotykasz problem, ponieważ funkcje Pythona nie zwracają wielu wyników, więc musisz znaleźć sposób na upchnięcie wszystkich tych argumentów w jedną zwracaną wartość.
Zwykłym sposobem zwracania „wielu wartości” w Pythonie jest zwrócenie krotki wartości - technicznie rzecz biorąc, jest to jedna zwracana wartość, ale można jej używać w większości kontekstów tak, jakby była to wiele wartości. Ale zrobienie tego tutaj oznacza, że otrzymasz
>>> 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,)
Szybkie rozwiązanie tego problemu daje inne problemy, jak pokazały różne odpowiedzi.
Podsumowując, w Pythonie nie ma zdefiniowanej funkcji tożsamości, ponieważ:
- Definicja formalna (funkcja z jednym argumentem) nie jest tak użyteczna i jest prosta do napisania.
- Rozszerzenie definicji na wiele argumentów nie jest ogólnie dobrze zdefiniowane, a znacznie lepiej jest zdefiniować własną wersję, która działa tak, jak tego potrzebujesz w konkretnej sytuacji.
Dla Twojego konkretnego przypadku,
def dummy_gettext(message):
return message
jest prawie na pewno tym, czego potrzebujesz - funkcją, która ma taką samą konwencję wywoływania i zwraca jak gettext.gettext, która zwraca swój argument niezmieniony i jest wyraźnie nazwana, aby opisać, co robi i gdzie ma być używana. Byłbym zszokowany, gdyby wydajność była tutaj kluczowym czynnikiem.
map and filter use None for the identity?