python - Python for循环中发生的内部操作

标签 python python-3.x

我从一些测试中知道下面的代码片段正在按预期工作,但我想知道这里的 python 后端发生了什么

for c in curr.getChildren():
  if point in c:
    change = True
    curr = c

举个例子:

x = [1,2,3]
for c in x:
  print ('hi')
  if c == 2:
    x = 2

print 语句触发 3 次,x 被重新分配给 2。python 是在内部将容器表示为某处的深拷贝,还是迭代器只是简单地内在链接到该容器的内存位置。这样安全吗?通常很好奇幕后发生了什么。

最佳答案

Python 对元素求值一次 (x) 并获得一个循环遍历的迭代器 (c)。这就是为什么您的循环没有像您希望的那样只迭代一次。

这里有几个位置可以解释这种行为。

docs.python.org

github.com/python/cpython

关于您对安全的关注,从您不会弄乱 for 循环的意义上来说,它是安全的。需要注意的是,如果您使用的是可变对象,则 for 循环可能会尝试越过对象的索引(或未到达末尾),如果您要删除数据(或添加数据) ).

关于python - Python for循环中发生的内部操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29973057/

相关文章:

python - 如何从两个间隔中获取分割月份?

Python3 .replace 产生 TypeError : a bytes-like object is required, 而不是 'str'

python - 从边界生成移动物体

python - 按自然顺序使用字母数字键对字典进行排序

android - 检查图像是否为黑色

python - 从Python中的SQL查询中选择时间戳

python-3.x - Unicode编码错误: 'charmap' codec can't encode character '\u2010' : character maps to <undefined>

python - PySpark 2 - 正则表达式替换之前的所有内容 <BR>

python - 如何使用列表 1 中元素的索引来更改列表 2 中的索引?

python - 如何在 OS X 上将 Python 的默认版本设置为 3.x?