2012-11-29 16 views
5

fand ich diese Art von Ausdruck mehrmals in einem Python-Programm:Macht dieser Python-Ausdruck Sinn?

if variable is not None: 
    dothings(variable) 

Es scheint mir seltsam, und ich denke, dass es keinen Sinn mehr, als hat:

if variable: 
    dothings(variable) 

Vielleicht I don‘ Kennen Sie Python genug, und der Ausdruck wird irgendwo erklärt?

Antwort

14

variable könnte 0 sein, oder False oder [] oder (); in anderen Worten "falsch" sein, und dann würde die if Anweisung übersprungen werden.

Weitere Informationen darüber, was in einem booleschen Kontext als falsch angesehen wird, finden Sie unter Truth testing.

Kurz gesagt, die Prüfung, ob variable is not None erlaubt variableetwas anderes, einschließlich Werte zu sein, die sonst in einem Booleschen Kontext falsch angesehen werden würde.

+0

Also, .... "A" ist nicht " B "ist anders als" A ist 'nicht B'" und Python wendet das erstere an. Ist es nicht? – Zhen

+0

'ist nicht' ist das Gegenteil von' ist', ja. Siehe http://docs.python.org/2/reference/expressions.html#not-in. Man könnte auch sagen "nicht A ist B". –

5

Einige Werte sind Falsy, sind aber nicht None. Möglicherweise möchten Sie noch dothings() zu diesen Werten.

Here are the things that are falsy in Python 2. (Sie können die ‚2‘ in der URL zu einem ‚3‘ zu ändern, um die Werte für Python 3 zu bekommen, aber es hat nicht viel ändern.)

1

z.

i = 0 

if i is not None: 
    print i # prints i 

if i: 
    print i # prints nothing 
0

In der Google Voice Python-Implementierung stieß ich auch darauf, ihre Verwendung war während eines Funktionsaufrufs. Die Parameter werden standardmäßig auf "None" gesetzt, und wenn die Funktion aufgerufen wird, können sie überprüfen, ob die Werte geändert wurden oder der Standardwert ist. I.E.

def login (user=None, password=None) 
    if user is None: 
    user = input('Please enter your username'); 
    ... 
    return <something>; 

von

login() 

ODER

login(user='cool_dude') 

ODER

eine beliebige Kombination von Benutzer/Passwort, das Sie wünschen genannt.

Zusätzlich bedeutet Ihre "Aktualisierung" der Logik, dass die Variable == wahr oder falsch ist. Das ist nicht in allen Fällen richtig (es kann in einigen Fällen funktionieren, aber ich werfe sie raus, da es kein allgemeiner Fall ist). Was Sie testen, indem Sie die "NONE" -Logik verwenden, ist, ob die Variable außer NONE alles enthält. Ähnlich wie das, was ich oben gesagt habe, war die ganze "Login-Funktion" zu bestimmen, ob der Benutzer etwas, nicht ob der Wert gültig war, wahr, usw.