2017-09-26 66 views

回答

1

什麼是andor

a and b是寫a if not a else b的一個奇特的方式。也就是說,如果a是虛假的,返回它是因爲虛假和任何東西都是虛假的。否則,返回b

a or b是寫a if a else b的一個奇特的方式。也就是說,如果a是真的,請歸還它,因爲真的或任何東西都是真的。否則,返回b

所以,andor不一定返回布爾值。

1 == 1 and 0 or 0.1(1 == 1 and 0) or 0.1,因爲and的優先級高於or; 1 == 1 and 01 == 1 if not 1 == 1 else 0;顯然1 == 1所以結果是0。最終的表達是0 or 0.1這是0 if 0 else 0.1並明確0是falsy所以我們得到0.1

注意and短路的falsy左(允許你做這樣的事情x < len(l) and l[x] == k,並truthy左or短路。

2

這種情況:

1 == 1 => True 
True and 0 => 0 
0 or 0.1 => 0.1 

你可以打開你的REPL來模擬它。


我認爲,迷惑你的是,你也許認爲,和/或操作必須返回boolean值。

但是,如果不是這樣,他們會返回參與比較的實際值。

0

1==1意味着真。 bool and a or b像C. bool?a:b

但現在它是一個特殊情況a = 0,在這種情況下,b將返回。

此表達式bool?a:b將失敗。它將這樣做:

1==1是真實的,a是false.So 1==1 and a是假

然後,false or b爲b。

0

如果你曾經在學校學的操作順序,你知道,指數的乘法/除法之前評估。

在同樣的意義上,Python有order of operations,其中運算符andor的優先級非常低。重要的是要知道and的優先級低於or,並且相等比較==的優先級高於兩者。

1 == 1 and 0 or 0.1 

上面將評估按照以下順序:

>>> 1 == 1  # equality comparison evaluates to True 
True 
>>> True and 0 # boolean AND evaluates to 0 
0 
>>> 0 or 0.1  # boolean OR evaluates to 0.1 
0.1