有人可以爲我解釋這個嗎?在Python中連續'是'運算符
>>> None is None is None
True
>>> (None is None) is None
False
不是'操作符'需要2個操作數,比較左邊的對象,並返回布爾值?
有人可以爲我解釋這個嗎?在Python中連續'是'運算符
>>> None is None is None
True
>>> (None is None) is None
False
不是'操作符'需要2個操作數,比較左邊的對象,並返回布爾值?
與2 < 3 < 4
比較。
第二個是否與第一個相同無?是。第三名是否與第二名相同?是。
OTOH,(True) is None
顯然是False。括號打破了鏈接。
評價lo < n < hi
是一個常見的python習慣用法,這並不會讓你擔心True < 4
的中間結果。評估x is y is z
不太常見,但對於您的單身人士None
這三個對象是相同的。
這並不能解釋任何事情。爲什麼會這樣?僅僅因爲其他一些不相關的運營商有類似的行爲? –
因爲它是被解釋爲一個chained comparison:
comparison ::= or_expr (comp_operator or_expr)*
comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!="
| "is" ["not"] | ["not"] "in"
比較可以任意鏈的,例如,
x < y <= z
相當於 到x < y and y <= z
,不同之處在於計算y只有一次(但在這兩種 例當發現x < y
爲假時,z根本不被評估)。在形式上,如果
a, b, c, …, y, z
是表達式和op1, op2, …, opN
是 比較運算符,然後a op1 b op2 c ... y opN z
相當於a op1 b and b op2 c and ... y opN z
,除了每個表達式是 評價最多一次。
因此,由於is
是一個比較運營商,你的第一個表達式等價於:
None is None and None is None
這是如何得到downvoted? –
@MadPhysicist可能是因爲它是重複的。我可能應該知道。 –
這是否意味着'None不是5 <10'也是'True',因爲如果混合比較運算符好的話? –
不完全是一個重複的,其他的問題意味着人知道鏈接的表情特徵,並詢問是否可以適用到'是'。 –
@FerdinandBeyer mm,如果你想重新打開它,我會保留給你。通常情況下,當另外一個問題出現時,人們會着迷於着名的[最小驚訝和可變默認參數](https://stackoverflow.com/questions/1132941/least-astonishment-and-the-mutable-default-argument)真的在問起他們看到的*無法解釋的行爲。我敢打賭,還有其他潛在的重複,但。 –
謝謝你讓我知道。我承認這是重複的,但我真的找不到那些文章或引用,所以我不得不問。 – vbstb