2016-05-23 3 views
1

Kann jemand das folgende erklären?verkettet AND Bedingung ergibt mehrdeutiges Ergebnis

a = [2,3,4] 
b = [5,6,8,9] 

print(len(a) > 0) 
print(len(b) > 0) 
print((len(a) > 0) & len(b) > 0)) 

Ausgang:

True 
True 
False 

Sollte nicht die letzte Anweisung Druck true zurück? Wenn ich umschreiben es jetzt als:

print((len(a) > 0) & (len(b) > 0)) 

(beachten Sie die Klammern um die zweite UND-Bedingung), erhalte ich die Ausgabe als True.

Das ist verwirrend für mich. Warum ändert das Hinzufügen der zweiten UND-Bedingung in Klammern das Ergebnis?

Antwort

7

& ist nicht der logische "und" Operator. Es ist der bitweise "und" -Operator, und als solcher hat er Vorrang für eine bitweise Operation anstelle einer logischen. Der Vorrang höher als der Vorrang für den Vergleich, so wird der Ausdruck als

((len(a) > 0) & len(b)) > 0 

analysiert Wenn Sie eine logisches and verwenden, funktioniert der Vorrang wie erwartet:

print(len(a) > 0 and len(b) > 0) 
+0

Dank für das ich das Gefühl so blöd. Aber im Ernst, danke! Ich kann nicht glauben, dass ich nicht darüber nachgedacht habe. – lostsoul29

Verwandte Themen