Una domanda newbie Python, perché questa sintassi non è valida: lambda: pass
, mentre questo: def f(): pass
è corretto?Python: dichiarazione del passaggio in forma lambda
Grazie per la vostra comprensione.
Una domanda newbie Python, perché questa sintassi non è valida: lambda: pass
, mentre questo: def f(): pass
è corretto?Python: dichiarazione del passaggio in forma lambda
Grazie per la vostra comprensione.
Questo è un errore perché dopo i due punti si deve mettere il valore di ritorno, in modo da:
lambda: pass
è pari a:
def f():
return pass
che rende davvero non ha senso e produce un SyntaxError
come bene.
lambda può contenere solo espressioni - in pratica, qualcosa che può apparire sul lato destro di un'istruzione di assegnazione. pass
non è un'espressione: non valuta un valore e a = pass
non è mai legale.
Un altro modo di pensare è, perché lambda tornare implicitamente il risultato del loro corpo, lambda: pass
è in realtà equivale a:
def f():
return pass
Il che non ha senso. Se hai davvero bisogno di un lambda no-op per qualche motivo, fai invece lambda: None
.
Questo ha senso, grazie! Ma poi, dal momento che 'lambda: None' restituisce ancora un valore, esiste un modo per definire una funzione anonima che si comporti esattamente come' def f(): pass'? – Rez
@Rez it * è * in realtà lo stesso - tutte le funzioni di Python restituiscono un valore; se cadono dalla fine o raggiungono un 'ritorno', restituiscono' Nessuno'. – lvc
Il valore restituito di una funzione senza un'istruzione return
è None
. Si può vedere questo dal semplice funzione pass
che è definita nel PO:
>>> def f():
... pass
...
>>> print f()
None
Se siete alla ricerca di una funzione lambda che è equivalente a questa funzione "no-op", allora è possibile utilizzare:
lambda: None
Ad esempio:
>>> f = lambda: None
>>> print f()
None
risposta chiara e semplice. Grazie :) – Rez