我想知道是否有人可以解释Python的“in”关键字和contains方法之间的区别
我正在处理示例列表并发现了这种行为。这两个应该什么时候使用?如果我使用其中一种而不是另一种,是否可以实现一些效率?
>>> my_list = ["a", "b", "c"]
>>> my_list.__contains__("a")
True
>>> "a" in my_list
True
Run Code Online (Sandbox Code Playgroud)
__contains__()
当您使用该语句时,将调用对象的方法in
。
对于列表,这是预先定义的,但您也可以定义自己的类,添加方法__contains__
并in
在该类的实例上使用。
您应该使用in
而不是__contains__()
直接调用。
来自文档:
对于列表和元组类型,当且仅当存在索引 i 使得 x == y[i] 为 true 时,x in y 才为 true。
字符串类型,x in y 为 true 当且仅当 x 是 y 的子字符串。等效测试是 y.find(x) != -1。
对于定义该方法的用户定义类
__contains__()
,当且仅当 y 中的 x 为 true 时,x 才y.__contains__(x)
为 true。对于不定义
__contains__()
但确实定义的用户定义类__iter__()
,如果在迭代 y 时生成 x == z 的某个值 z,则 x in y 为 true。如果在迭代期间引发异常,就好像引发了该异常。最后,尝试旧式迭代协议:如果类定义
__getitem__()
,则 y 中的 x 为 true 当且仅当存在非负整数索引 i 使得 x == y[i] 且所有较低整数索引都满足不引发IndexError
异常。
归档时间: |
|
查看次数: |
7969 次 |
最近记录: |