表达式中的 Python 'in' 关键字与 for 循环中的关键字

新手上路,请多包涵

我了解 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 许可协议

阅读 816
2 个回答

它们是相同的概念但不是相同的运算符。

print(2 in some_list) 示例中, in 是一个处理多种不同情况的运算符。 The Python docs for the in operator give the details, which I paraphrase as follows: x in y calls y.__contains__(x) if y has a __contains__ 成员函数。 Otherwise, x in y tries iterating through y.__iter__() to find x , or calls y.__getitem__(x) if __iter__ doesn’t exist .复杂性在于为旧代码和新代码提供一致的成员资格测试 — __contains__ 如果您要实现自己的类,这就是您想要的。

for 循环中, in 只是一个标记,用于将循环索引变量与您循环的任何内容分开。 for 循环的 Python 文档 讨论了语义,我解释如下:在 in 之后的任何内容都在循环开始时进行评估以提供迭代器。然后循环体针对迭代器的每个元素运行(除非 break 或其他控制流更改)。 for 语句不用担心 __contains____getitem__

编辑@Kelvin 提出了一个很好的观点:您可以更改 in 相对于您自己的新样式类( class foo(object) )的行为:

原文由 cxw 发布,翻译遵循 CC BY-SA 4.0 许可协议

不,尽管他们都使用同一个词,但他们做的事情却不同。 in 在这两种情况下都是语法结构,例如它不是对象的名称并且不能更改。你可以 在这里这里 看到每一个的句法定义。如您所见,名称是硬编码的,没有任何关系。

原文由 syntonym 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题