[英]not, and, or in Python
not 1==2 or 3==3 and 5==6
這是如何評估的? 我知道順序不是, and , or (從強到弱)
所以如果我不先做,這些步驟是什么:
not 1==2 or 3==3
等於False
False
和False
等於False
但我很困惑,因為順序不是, and , or
那么為什么我在and之前先做or呢?
首先,該表達式給出True作為 output。 操作是這樣一步一步進行的:
1. (not 1==2) or (3==3 and 5==6)
2. (True) or (True and False)
3. True or False
4. True
如需進一步參考,請查看: python 中的運算符優先級
我將使用括號來解釋這是如何處理的:
(not 1==2) or (3==3 and 5==6)
它執行not 1==2
的第一次檢查,即True
。
假設它等於假,因為它旁邊有一個or
,然后它將執行下一次檢查3==3 and 5==6
,然后返回False
我們not
知道之前and
之前or
。 or
有邏輯短路 - 一旦or
表達式之一通過返回True
計算為True
,它就會停止。 and
對於由and
連接的任何元素發生的第一個False
具有邏輯短路。
(not 1==2) or (3==3 and 5==6)
(not 1==2)
已經是True
。 由於邏輯短路,我們不需要考慮其余部分,但知道整個or
表達式返回True
。
如果 A 為 True,則 A 或 B 返回 A,否則返回 B,即惰性求值。
(不是 1==2)---> 真
這聽起來可能很愚蠢,但代碼就停在那里。 甚至沒有達到和部分
你不相信?
print(not 1==2 or (print('The Code Reaches Here,'),4==2)[0] and (print('The Code Reaches Here!'),4==5)[0])
嘗試運行此代碼。 它不會打印,因為那里沒有到達代碼。
推理不正確。 您需要查看運算符優先級
因此,在您擁有的四個運算符中, not x
、 ==
or
, and
,其順序是:
==
not x
and
or
這意味着not 1==2 or 3==3 and 5==6
等於:
not (1==2) or (3==3) and (5==6) => not False or True and False
(not False) or True and False => True or True and False
True or (True and False) => True or False
True or False => True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.