簡體   English   中英

Python:!=和“不是”之間的區別

[英]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.

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