2016-05-16 35 views
1

Ich ging über eine Aufgabe und stieß auf etwas, das mich verwirrte, denn ich bin nicht verrückt gut mit Python. Hier ist der Code.Warum ist diese Python-If-Anweisung ungleich wahr?

def main(): 


    list = [1,2] 
    x = 2 

    if (x in list == True): 
     print("hi") 

    if (x in list): 
     print("Why does this proc?") 

main() 

Ich glaubte, die Ausgabe wäre beides, aber die Ausgabe ist nur die zweite if-Anweisung. Ich weiß, dass in C, wenn Sie so etwas wie

if (x = 6) 

Das hatten da nur ein ‚=‘, daß x jetzt gleich 6 (Wie die Lese, wenn(), x = 6).

Passiert etwas ähnliches mit diesem Python-Code? Wird zuerst 'list == true' überprüft, und von dort aus überprüft, ob x in der Liste ist?

Jeder Einblick würde sehr geschätzt werden!

+2

Das ist es genau. Es wird überprüft, ob 'x in Liste und Liste == Wahr 'ist. –

+0

Aus Neugier, warum bekomme ich keinen Fehler? Ich habe auch ein paar Tests gemacht und habe 'if (list == False) probiert und das passiert auch nicht. Wenn Python die beiden vergleicht, was ist das Ergebnis? – Childishforlife

+1

Warum erhalten Sie einen Fehler? Das ist eine absolut legale Python-Anweisung. Und ja, das wird auch nicht funktionieren, "Liste" ist nicht gleich "Falsch". –

Antwort

6

Wie Sie sehen können, ja, benötigt Ihr Ausdruck explizite Gruppierung:

>>> 2 in [1,2] == True 
False 
>>> (2 in [1,2]) == True 
True 

zu beachten, dass, wie @tavo und @MorganThrapp erwähnen, die Version ohne Klammern ist eine verkettete Vergleich zu tun, dass 2 in [1,2] prüft und dann Überprüfen, dass [1,2] == True. Letzteres ist falsch, also ist der volle Ausdruck auch falsch.

Übrigens, benennen Sie Ihre Variablen nicht nach Einbauten wie list, oder Sie werden nicht in der Lage sein, diese Funktionen einfach zu verwenden.

Auch Sie müssen nicht das Ergebnis eines Ausdrucks True vergleichen:

>>> 2 in [1,2] 
True 

so zu tun, ist das Äquivalent zu fragen „ist‚der Kuchen ist bereit,‘eine wahre Aussage?“ im Gegensatz zu "ist der Kuchen fertig?".

+2

Sind Sie sicher, dass es sich nur um die Betriebspriorität handelt? Weil '2 in ([1, 2] == True)' einen Fehler auslöst. – tavo

+0

Ich entschuldige mich für die Terminologie, es war nur etwas, was ich hier gepostet habe, es wurde nicht wirklich Code verwendet. Danke für die Information! – Childishforlife

+0

@tavo - Bekannt und bearbeitet; Danke. – TigerhawkT3