2017-09-13 64 views
-4

當「如果」是結合「或」,其中之一的Python優先第一: 例如:爲什麼這個條件表達式不會生成一個SyntaxError?

if a == b or c 

是它(a == b) or c還是a == (b or c)。 我認爲正確的邏輯形式應該是前者,但我不小心用:

if gender == "m' or "M" 

和我吃驚的是,它並沒有產生任何錯誤,並做了目的。

+1

問題沒有顯示出研究工作。一個簡單的搜索或谷歌搜索將揭示答案。請閱讀並遵循發佈指南:我可以詢問哪些類型的問題https://stackoverflow.com/help/on-topic,以及如何提問:https://stackoverflow.com/help/how-to-ask。請記住還要包含最小,完整,可驗證的示例:https://stackoverflow.com/help/mcve。然後,點擊編輯編輯您的問題,以便我們提供幫助。 – SherylHohman

回答

0

documentation

下表總結在Python操作優先級,從 最低優先級(至少結合)到最高優先級(最 結合)。

lambda 
if – else 
or  
and 
not x 
in, not in, is, is not, <, <=, >, >=, !=, == 
... 

因此,要回答你的問題,

a == b or c 

是相當於

(a == b) or (c) 

代碼if gender == "m" or "M"會像這樣:是gender == 'm"?如果是,結果是True。否則,測試"M"的「真實性」。是"M"「真」?如果是,結果是真的。要理解這是如何工作的,你應該知道所有對象都有一個與之相關的真實性。所有非零整數,非空字符串和數據結構爲True0,0.0, '',None,False,[],{}set()都是False

有關詳細信息,請訪問:How do I test one variable against multiple values?

+0

謝謝,這對我來說似乎和我一直使用的邏輯是一樣的。但是,請你解釋一下我在代碼中的用法: – Mercury

+0

@COLDSPEED:再次感謝你。我讚賞這樣一個明確的解釋。 – Mercury

相關問題