2012-10-14 7 views

risposta

25

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.

+0

risposta chiara e semplice. Grazie :) – Rez

28

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.

+2

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

+16

@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

4

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