2017-08-05 6 views
2

Wenn Booleschen Ausdrücken in Python hinzugefügt, es scheint, dass sie in Klammern wirft sie in int umschließt, wenn Sie sie hinzufügen, aber nicht so unterhält ihre Arten tun:Warum gibt (0> 1 + 0> 9) Falsch zurück, aber ((0> 1) + (0> 9)) gibt 0 zurück?

>>> ((0>1) + (0>9)) 
0 
>>> (0>1 + 0>9) 
False 
>>> (0>1 + (0>9)) 
False 

Warum ist das? Es scheint mir, dass Klammern sollten nur die Reihenfolge der Operationen ändern verwendet werden (mit Ausnahme einiger Fälle, in denen Sie mit runden Klammern Tupeln definieren), nicht die Art des Inhalts, so würde ich erwarten:

(<expression>) == <expression> 

Antwort

5
>>> ((0>1) + (0>9)) 
0 

Dies ist eine ganzzahlige Addition, da False eine Ganzzahl ist. bool definiert keine Addition, daher ist False + False in der Elternklasse int.__add__ aufgelöst.

>>> (0>1 + 0>9) 
False 

Dies ist ein verkettete Vergleich, ist es 0 > 1 > 9 in der Verkleidung.

>>> (0>1 + (0>9)) 
False 

Dies ist ein regelmäßiger Vergleich, es ist 0 > 1 + False in Verkleidung.

+0

Ah. Ich hatte den Eindruck, dass der Vergleichsoperator Vorrang vor den arithmetischen hatte, aber es macht Sinn, dass sie das nicht tun, sonst wären Dinge wie 1 + 0> 9 wirklich unintuitiv. https://docs.python.org/3/reference/expressions.html#operator-precedence – germanjaber

Verwandte Themen