這只是兩種方式來編寫相同的代碼?我應該注意到有什麼功能差異嗎?是否有顯着差異:如果不是== =='酒吧',如果!='酒吧'?
>>> a = 'foo'
>>> if not a == 'bar':
... 'its not'
...
'its not'
>>> if a != 'bar':
... 'its not'
...
'its not'
這只是兩種方式來編寫相同的代碼?我應該注意到有什麼功能差異嗎?是否有顯着差異:如果不是== =='酒吧',如果!='酒吧'?
>>> a = 'foo'
>>> if not a == 'bar':
... 'its not'
...
'its not'
>>> if a != 'bar':
... 'its not'
...
'its not'
在python中,爲了檢查一個對象是否等於或不等於另一個對象,調用特殊函數。 __eq__
被稱爲檢查==
,而__ne__
被稱爲檢查!=
一般來說,對象可能不是__eq__
定義__ne__
不同。
E.g.
class Junk(object):
def __ne__(self, other):
return False
def __eq__(self, other):
return False
j = Junk()
print not j == 1
print j != 1
這產生了:
True
False
然而,這將是非常邪惡的......通常你應該永遠不必擔心這個問題。
奇怪!什麼是一個人會真正想要「a .__ ne __(b)!=不是.__ eq __(b)`? – wim 2011-12-15 02:49:50
not a == b
被翻譯爲致電not a.__eq__(b)
,而a != b
被翻譯爲致電a.__ne__(b)
。大多數情況下(幾乎所有我能想到的正常對象),__ne__
被定義爲def __ne__(self, other): not self.__eq__(other)
,所以沒有功能差異。但是,您可以輕鬆創建一個與其他值相同並且不等於其他值的精神病對象,只需以正確的方式覆蓋__ne__
(儘管我無法想象現在這種情況會有意義的情況)。
另一方面,內建對象可能以比not a == b
稍快的方式實施a != b
,但可能不會有任何明顯的量。
當你使用`timeit`時,你發現了什麼? – 2011-12-15 02:55:47