2013-05-21 5 views
19

So che lambda non ha un'espressione di ritorno. Normalmentepython - può lambda avere più di un ritorno

def one_return(a): 
    #logic is here 
    c = a + 1 
    return c 

si può scrivere:

lambda a : a + 1 

ne dite di scrivere questo in una funzione lambda:

def two_returns(a, b): 
    # logic is here 
    c = a + 1 
    d = b * 1 
    return c, d 
+9

Questo non è più di un ritorno, non è nemmeno un singolo ritorno con più valori. È un ritorno con un valore (che sembra essere una tupla). – delnan

+1

+1 al commento di delnan, questo è uno dei motivi principali per cui non mi piace la promozione di Python di ',' di creare una tupla dappertutto. Esso offusca ciò che sta effettivamente accadendo. – Izkata

+5

@Izkata Che cosa? ',' non è "promosso in tupla", letteralmente è la sintassi per la creazione di tuple. Ed è perfettamente chiaro IMHO. – delnan

risposta

27

Sì, è possibile. Perché un'espressione come questo alla fine di una funzione:

return a, b 

è equivalente a questo:

return (a, b) 

E lì, si sta davvero tornando un unico valore: una tupla, che succede ad avere due elementi. Quindi è ok avere un lambda restituire una tupla, perché è un singolo valore:

lambda a, b: (a, b) # here the return is implicit 
+3

in altre parole, è un problema di precedenza. ',' ha precedenza più bassa di 'lambda' – newacct

14

Certo:

lambda a, b: (a + 1, b * 1) 
9

che dire:

lambda a,b: (a+1,b*1)