>>> item = 2
>>> seq = [1,2,3]
>>> print (item in seq)
True
>>> print (item in seq is True)
False
爲什麼第二個print
聲明輸出False
?'in'運算符意外的結果 - Python
>>> item = 2
>>> seq = [1,2,3]
>>> print (item in seq)
True
>>> print (item in seq is True)
False
爲什麼第二個print
聲明輸出False
?'in'運算符意外的結果 - Python
in
和is
是比較操作符在Python,在這方面如,比方說,<
和==
相同。一般地,如
(expr1 <comparison1> expr2) and (expr2 <comparison2> expr3)
除了expr2
只計算一次
expr1 <comparison1> expr2 <comparison2> expr3
得到治療。這就是爲什麼,例如,
0 <= i < n
按預期工作。但是,它適用於任何鏈式比較運算符。在你的榜樣,
item in seq is True
被視爲
(item in seq) and (seq is True)
的seq is True
部分是假的,所以整個表達式爲假。爲了得到什麼,你可能打算,使用括號來改變分組:
print((item in seq) is True)
Click here for the docs。如下圖所示
>>>print ((item in seq) and (seq is True))
False
(SEQ是真)是假,因此您的發言輸出假
下面的答案不正確。註釋解釋它證實了我:
In [17]: item in (seq is True)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-17-4e7d6b2332d7> in <module>()
----> 1 item in (seq is True)
類型錯誤:類型「布爾」的說法是不迭代
以前的答案 我相信它正在評估seq is True
(其計算結果爲布爾False
) ,然後評估item in False
(其評估爲False
)。
想必你的意思print (item in seq) is True
(計算結果爲True
)?
'項提出了一個'TypeError',作爲右手值必須是一個迭代,這'FALSE'不是。 –
更改了答案。謝謝 – travelingbones
這可能是因爲python如何評估一個表達式。您可能需要使用'打印(序列(項目)爲真)' –