Nov*_*ice 9 python loops python-3.x semantics
我理解in运算符在此代码中的作用:
some_list = [1, 2, 3, 4, 5]
print(2 in some_list)
Run Code Online (Sandbox Code Playgroud)
我也明白i将在此代码中采用列表的每个值:
for i in [1, 2, 3, 4, 5]:
print(i)
Run Code Online (Sandbox Code Playgroud)
我很好奇,如果in在使用的操作for循环是一样的in第一个代码使用运营商.
cxw*_*cxw 18
它们是相同的概念,但不是相同的运营商.
在该print(2 in some_list)示例中,in是一个处理几种不同情况的运算符.运算符的Python文档in提供了详细信息:x in y调用y.__contains__(x)if是否y具有__contains__成员函数.否则,x in y尝试迭代y.__iter__()查找x,或调用y.__getitem__(x)if __iter__是否不存在.复杂性是为旧代码和更新代码提供一致的成员资格测试 - __contains__如果您正在实现自己的类,则是您想要的.
在for循环中,in它只是一个标记,它将循环索引变量与循环中的任何变量分开.循环的Python文档for讨论了语义:in在循环开始时评估后面的任何内容以提供迭代器.然后循环体为迭代器的每个元素运行(限制break或其他控制流更改).该for声明并不担心__contains__或__getitem__.
编辑 @Kelvin提出了一个很好的观点:你可以改变in你自己的新式类的行为(class foo(object)):
x in y,定义y.__contains__(). for x in y,定义y.__iter__().| 归档时间: |
|
| 查看次数: |
11088 次 |
| 最近记录: |