我了解 in
运算符在此代码中的作用:
some_list = [1, 2, 3, 4, 5]
print(2 in some_list)
我也明白 i
将采用此代码中列表的每个值:
for i in [1, 2, 3, 4, 5]:
print(i)
我很好奇在 for
循环中使用的 in
运算符是否与 in
运算符相同。
原文由 Novice 发布,翻译遵循 CC BY-SA 4.0 许可协议
我了解 in
运算符在此代码中的作用:
some_list = [1, 2, 3, 4, 5]
print(2 in some_list)
我也明白 i
将采用此代码中列表的每个值:
for i in [1, 2, 3, 4, 5]:
print(i)
我很好奇在 for
循环中使用的 in
运算符是否与 in
运算符相同。
原文由 Novice 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
它们是相同的概念但不是相同的运算符。
在
print(2 in some_list)
示例中,in
是一个处理多种不同情况的运算符。 The Python docs for thein
operator give the details, which I paraphrase as follows:x in y
callsy.__contains__(x)
ify
has a__contains__
成员函数。 Otherwise,x in y
tries iterating throughy.__iter__()
to findx
, or callsy.__getitem__(x)
if__iter__
doesn’t exist .复杂性在于为旧代码和新代码提供一致的成员资格测试 —__contains__
如果您要实现自己的类,这就是您想要的。在
for
循环中,in
只是一个标记,用于将循环索引变量与您循环的任何内容分开。for
循环的 Python 文档 讨论了语义,我解释如下:在in
之后的任何内容都在循环开始时进行评估以提供迭代器。然后循环体针对迭代器的每个元素运行(除非break
或其他控制流更改)。for
语句不用担心__contains__
或__getitem__
。编辑@Kelvin 提出了一个很好的观点:您可以更改
in
相对于您自己的新样式类(class foo(object)
)的行为:x in y
, 请定义y.__contains__()
。for x in y
, 定义y.__iter__()
。