簡體   English   中英

不是,和,或在 Python

[英]not, and, or in Python

not 1==2 or 3==3 and 5==6

這是如何評估的? 我知道順序不是, and , or (從強到弱)

所以如果我不先做,這些步驟是什么:

  1. not 1==2 or 3==3等於False
  2. 那么FalseFalse等於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 ,其順序是:

  1. ==
  2. not x
  3. and
  4. or

這意味着not 1==2 or 3==3 and 5==6等於:

  1. not (1==2) or (3==3) and (5==6) => not False or True and False
  2. (not False) or True and False => True or True and False
  3. True or (True and False) => True or False
  4. True or False => True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM