2012-12-04 9 views

risposta

162

è possibile utilizzare il or dell'operatore:

return x or "default" 

Si noti che questo restituisce anche se "default"x è qualsiasi valore falsy, tra cui una lista vuota, 0, stringa vuota, o anche datetime.time(0) (mezzanotte).

+24

Questo restituirà "default" se x è un valore falsy, ad es. 'Nessuno',' [] ',' "" ', ecc., Ma è spesso abbastanza buono e dall'aspetto più pulito. – FogleBird

+0

Ottiene 'NameError: name 'x' non è definito' – Stephen

+9

Restituisce" default "se x è 0 (zero) pure – thameera

23

È possibile utilizzare un conditional expression:

x if x is not None else some_value 

Esempio:

In [22]: x = None 

In [23]: print x if x is not None else "foo" 
foo 

In [24]: x = "bar" 

In [25]: print x if x is not None else "foo" 
bar 
3

Hai la sintassi ternario x if x else '' - è che quello che stai dopo?

+4

E in realtà non è * chiamato * una sintassi ternaria (qualsiasi operatore che prende 3 operandi potrebbe essere chiamato operatore ternario, non solo questo). Il nome corretto è un'espressione condizionale. –

+2

non funziona se x == 0 o qualsiasi valore falsy – wisbucky

+0

@wisbucky quindi si rendono i criteri specifici per il contesto è necessario ... 'Nessuno' o qualsiasi altro valore sentinella o criteri ... –

51
return "default" if x is None else x 

provare quanto sopra.

+0

Da utilizzare quando si desidera solo il valore predefinito quando x è Nessuno e non altri valori falsi. Che corrisponde a C# x ?? "default" –

+2

Altrimenti, basta rilasciare 'is None', e lasciare che' x' valuti come valore booleano. – chepner

+0

Oppure usa @ x starhusker o "default". Spesso usavo la ternaria sytax b/c I cosa fare x.valore se X poteva essere None. Quindi x.valore se x else "default", ma questo è più leggibile getattr (obj, "value", "default"). Il compromesso è che il futuro non viene catturato da molti strumenti di auto-refactoring. –

6
x or "default" 

funziona meglio - posso anche usare una linea chiamata di funzione, senza eseguirlo due volte o utilizzando variabile in più:

self.lineEdit_path.setText(self.getDir(basepath) or basepath) 

Io lo uso quando si apre Qt di dialog.getExistingDirectory() e cancellando, che restituisce una stringa vuota.

+1

_ "funziona meglio" _ - tranne quando _x_ può avere un valore di falsità legittimo. quindi questa sintassi porterà a bug sottili e difficili da correggere. –

Problemi correlati