2015-10-30 22 views
6

Sto tentando di utilizzare 3 istruzioni if ​​all'interno di una funzione lambda python. Ecco il mio codice:Più istruzioni if ​​in una funzione lambda

y=lambda symbol: 'X' if symbol==True 'O' if symbol==False else ' ' 

Sono stato in grado di ottenere due istruzioni if ​​funzionano correttamente, ad es.

x=lambda cake: "Yum" if cake=="chocolate" else "Yuck" 

In sostanza, voglio una funzione lambda da usare se le dichiarazioni di tornare 'X' se il simbolo è vero, 'O' se è falso, e '' in caso contrario. Non sono nemmeno sicuro se questo sia possibile, ma non sono stato in grado di trovare alcuna informazione su Internet, quindi gradirei qualsiasi aiuto :)

+0

Se simbolo è un valore booleano, può avere solo due valori . Cosa potrebbe mai inciampare nell'ultimo 'else'? – ddsnowboard

+1

@ddsnowboard quasi tutto ciò che non è un booleano. – bereal

+0

@bereal Quindi l'idea è che il 'simbolo' possa essere di qualsiasi tipo? – ddsnowboard

risposta

6

Ti manca un else prima del 'O'. This opere:

y = lambda symbol: 'X' if symbol==True else 'O' if symbol==False else ' ' 

Tuttavia, penso che si dovrebbe attenersi a Adam Smith's approach. Lo trovo più facile da leggere.

+1

Grazie! Funziona alla grande –

13

È possibile utilizzare un dict anonima all'interno della vostra funzione anonima per verificare questo, utilizzando il valore predefinito di dict.get a simboleggiare il tuo finale "altro"

y = lambda sym: {False: 'X', True: 'Y'}.get(sym, ' ') 
+0

Grazie, questo è molto utile. Ho risposto con la risposta di w0lf, perché rispondeva esattamente alla mia domanda, ma il tuo approccio è decisamente più pitonico e logico. –

+0

@ PM2Ring Whoops, giusto, perché stai testando l'equivalenza con il valore 'True' e il valore' False', piuttosto che testare per Truthyness o Falsyness. Io modifico –

Problemi correlati