[英]Python: Difference between != and “is not”
我不清楚語法之間的區別!=
而is not
。 他們似乎做了同樣的事情:
>>> s = 'a'
>>> s != 'a'
False
>>> s is not 'a'
False
但是,當我使用is not
列表理解時,它會產生與我使用時不同的結果!=
。
>>> s = "hello"
>>> [c for c in s if c is not 'o']
['h', 'e', 'l', 'l', 'o']
>>> [c for c in s if c != 'o']
['h', 'e', 'l', 'l']
為什么o
會被包含在第一個列表中,而不是第二個列表?
is
對象標識的測試,但==
測試對象值的相等性:
In [1]: a = 3424
In [2]: b = 3424
In [3]: a is b
Out[3]: False
In [4]: a == b
Out[4]: True
is not
比較參考。 ==
比較值
根據您的困惑,這可能會有所幫助。
這些陳述是一樣的:
[c for c in s if c != 'o']
[c for c in s if not c == 'o']
我只是從參考報價, is
操作數測試是否是一個相同的,很可能指的是同一個對象。 as !=
測試值。
s = [1,2,3]
while s is not []:
s.pop(0);
這是一個不確定的循環,因為對象s永遠不等於[]的對象引用,它指的是一個完全不同的對象。 用s != []
替換條件將使循環明確,因為我們在這里比較值,當s中的所有值都彈出時剩下的是一個空列表。
我想補充一點,他們絕對不會做同樣的事情。 我會用!=。 例如,如果你有一個unicode字符串....
a = u'hello'
'hello' is not a
True
'hello' != a
False
使用!=,Python基本上執行從str()到unicode()的隱式轉換並比較它們,而如果不是,則匹配它是否完全相同的實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.