Una funzione identità, come definito nella https://en.wikipedia.org/wiki/Identity_function, prende un singolo argomento e lo restituisce inalterato:
def identity(x):
return x
cosa si sta chiedendo quando dici che vuoi la firma def identity(*args)
non è strettamente una funzione di identità, come vuoi che prenda più argomenti. Va bene, ma poi si verifica un problema in quanto le funzioni Python non restituiscono più risultati, quindi è necessario trovare un modo per racchiudere tutti questi argomenti in un valore restituito.
Il modo usuale di restituire "valori multipli" in Python è restituire una tupla dei valori - tecnicamente si tratta di un valore restituito ma può essere utilizzato nella maggior parte dei contesti come se si trattasse di più valori. Ma farlo qui significa che si ottiene
>>> 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,)
e fissare che problema dà rapidamente altre questioni, come le diverse risposte qui hanno dimostrato.
Così, in sintesi, non c'è alcuna funzione identità definita in Python perché:
- La definizione formale (una sola funzione argomento) non è poi così utile, ed è banale scrivere.
- Estendere la definizione a più argomenti non è ben definito in generale, e si sta molto meglio definendo la propria versione che funziona nel modo in cui è necessario per la propria situazione particolare.
Per il vostro caso preciso,
def dummy_gettext(message):
return message
è quasi certamente ciò che si vuole - una funzione che ha la stessa convenzione di chiamata e di ritorno, gettext.gettext
, che restituisce il suo argomento invariata, ed è chiaramente il nome per descrivere cosa fa e dove è destinato ad essere usato. Sarei piuttosto scioccato se le prestazioni fossero una considerazione cruciale qui.
Cosa intendi per 'mappa e filtro usa Nessuno per l'identità'? –
@MattFenwick: 'map (None, [1, 2, 3])' –
Controlla il valore restituito. La variabile args sarà una sequenza di (in questo scenario) un valore, quindi omettendo l'asterisco nella dichiarazione o scompattandolo prima di tornare. – Dirk