2017-02-20 114 views
0

in運算符如何爲Python工作?'in'運算符如何爲Python工作?

在下面的例子中,我有兩個名爲不同對象的命名對象,但in運算符對於包含其中一個對象的數組計算爲True。

in檢查數組是否包含對象,或者檢查數組中的任何對象是否相等?我試圖搜索文檔,但找不到任何具體的東西,只是簡單的例子。

In [3]: a = namedtuple('test', ['t'])        

In [6]: b = a(1)      

In [7]: c = a(1)      

In [8]: b is c       
Out[8]: False       

In [9]: id(b)       
Out[9]: 54740808      

In [10]: id(c)       
Out[10]: 88817352      

In [11]: c in [b]      
Out[11]: True       

In [12]: b in [c]      
Out[12]: True       

In [13]: c == b      
Out[13]: True   
+1

什麼'in'不會由'__contains定義__()'上操作者的右側的對象的方法。如果這是一個'list',它會調用'__eq __()'方法(這可以通過使用自定義的__eq __()方法實現一個類來解決),在'set'或'dict_keys'上,它比較hash我想,但不知道。如果任何元素沒有'__eq __()'方法,''不會返回'NotImplemented',那些只是默默地跳過。 – deeenes

回答

0

in運算符是檢查數組中包含的對象的哪個值是等價的。 這裏是例如:

In [1]: a = {} 

In [2]: b = {} 

In [3]: c = [a] 

In [4]: id(a), id(b), id(c[0]) 
Out[4]: (4514911128, 4515638640, 4514911128) 

In [5]: a in c 
Out[5]: True 

In [6]: b in c 
Out[6]: True