爲什麼在Python中這個表達式的值「1 == 1和0或0.1」等於0.1? 爲什麼在Python中這個表達式的值「1 == 1和0或0.1」等於0.1?
-1
A
回答
1
什麼是and
和or
?
a and b
是寫a if not a else b
的一個奇特的方式。也就是說,如果a
是虛假的,返回它是因爲虛假和任何東西都是虛假的。否則,返回b
。
a or b
是寫a if a else b
的一個奇特的方式。也就是說,如果a
是真的,請歸還它,因爲真的或任何東西都是真的。否則,返回b
。
所以,and
和or
不一定返回布爾值。
1 == 1 and 0 or 0.1
是(1 == 1 and 0) or 0.1
,因爲and
的優先級高於or
; 1 == 1 and 0
是1 == 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,其中運算符and
和or
的優先級非常低。重要的是要知道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
相關問題
- 1. 爲什麼0.1 * 10-1不等於0?
- 2. 1 %% 0.1 = 0.1 AND 1 %% 0.2 = 0.2?
- 3. 爲什麼1 // 0.1 == 9.0?
- 4. Octave 1/3和0.1值
- 5. 十個0.1浮點數的總和不等於1
- 6. 這個說法在八度中做了什麼? X = [ones(20,1)(exp(1)+ exp(2)*(0.1:0.1:2))'];
- 7. 爲什麼舍入-0.1回-0
- 8. 值大於0.1
- 9. 爲什麼表達式(0 == 0&1 == 1)評估爲False?
- 10. 爲什麼Python爲「True和1」表達式返回1?或假「假1」?
- 11. 1:10和0.1之間的差異:1.0
- 12. 爲什麼SELECT FLOAT(0.1)在DB2中返回0.1?
- 13. 這個cron表達式的含義是什麼0 50 13 1 1/1? *?
- 14. 爲什麼我的Solr得分都是從0.1到1?
- 15. 爲什麼「1」等於「+1」?
- 16. 爲什麼0.1 * 3 = 0.3
- 17. 小數如0.1和0.2等於0.30000000000000004
- 18. 爲什麼這個列表切片在Python中將0和1視爲相同?
- 19. 如何將float .1設置爲.1而不是0.1
- 20. C#++和 - 增加雙變量0.1 0.1
- 21. 正則表達式的值爲0.1到100.00
- 22. netbeans 7.1.2,scala 2.9.1-1,nbscala-7.1v2.9.x-0.1.zip
- 23. oracle值0.1變成.1不能在java中使用playframework模型
- 24. python爲什麼「BABAB」.count(「BAB」)等於1?
- 25. C#浮動錯誤? 0.1 - 0.1 = 1.490116E-08
- 26. 爲什麼1%2等於1?
- 27. 正則表達式的相等數量爲0和1
- 28. 爲什麼_XBEGIN_STARTED等於-1?
- 29. C爲什麼3除以2等於0,而是1等於1?
- 30. 這個表達式爲什麼相等?
這是'(((1 == 1)和0)或0.1)'。下面的答案可能應該從這個開始。 – lungj