假设我有一个任意容器,并询问其中是否有一个元素,如下所示。
D = {(1, 2): "whatever"}
if (2, 1) in D:
print( "Impossible" )
就底层代码而言,到底发生了什么?是否调用了任何特定的成员函数(例如 find())?
此外,我可以使用定制的 cmp/hash 吗?比如说,如果我只想比较元组的键中每个数字的出现次数,如代码片段所示,我该怎么做才能实现呢?
D = {(1, 2, 1): "whatever"}
if (2, 1, 1) in D:
print( "As expected" ) # How to make it happen?
如果能提供一份官方的 Py 文档我将非常感激,我认为这是相当基础的信息,但在任何地方都找不到官方介绍。
在幕后,
x in y
调用y.__contains__(x)
。因此,行为完全取决于如何type(y)
实现特殊__contains__
方法。最后一点可能会让人吃惊。它并没有返回
"hamburger"
,但在幕后还有另一层含义,它实际上返回了bool()
什么。__contains__()
这是在语言参考第 6.10.2 节中定义的。成员资格测试操作;特别是: