它们是相同的概念,但不是相同的运算符。
在
print(2 insome_list)示例中,
in是一个处理几种不同情况的运算符。在Python文档的
in运营商给予的细节,我意译如下:
x iny电话
y.__contains__(x),如果
y有一个
__contains__成员函数。否则,请
x iny尝试迭代
y.__iter__()查找
x,
y.__getitem__(x)如果
__iter__不存在,则调用。复杂性是为旧代码和新代码提供一致的成员资格测试-
__contains__如果要实现自己的类,这就是您想要的。
在
for循环中,
in仅仅是将loop-
index变量与循环中的变量分开的标记。循环的Python文档
for讨论了语义,我将其解释如下:
in在循环开始时对之后的内容进行评估以提供迭代器。然后,循环主体针对迭代器的每个元素运行(禁止
break或其他控制流更改)。该
for语句不必担心
__contains__或
__getitem__。
编辑 @Kelvin有一个好处:您可以
in针对自己的新型类(
class foo(object))更改行为:
- 要更改
x in y
,请定义y.__contains__()
。 - 要更改
for x in y
,请定义y.__iter__()
。



