为什么这个for循环不是无限的,这里循环一个列表并重新定义循环内的列表
a = [1,2,3,4,5,6,7,8,9]
for i in a:
print i
a = [1,2,3,4,5,6,7,8,9]
output : 1,2,3,4,5,6,7,8,9
答案 0 :(得分:3)
粗略地说,循环不是无限的,因为i
绑定的迭代器在代码执行到达for . . . in
循环时被绑定。之后,所有后续调用都是iter.next()
,这会将现有迭代器移动到下一个位置,而不管后续重新定义a
。
回想一下,数组有一个名为__iter__
(或iter
)的内置函数。然后,您的for
循环等同于:
a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9]
it = iter(a)
try:
while True:
print next(it) # for compatibility you may want to use next(it)
a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
except StopIteration:
pass
请注意,在上面的等效代码中,对a
的任何更改都不会影响i
,因为i
已经绑定到遍历第一个[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
的迭代器。
您可以通过更改a
:
a = [ 1, 2, 3, 4 ]
for i in a:
print i
a = [ 5, 4, 3, 2, 1 ]
请注意a = [ 5, 4, 3, 2, 1 ]
不会从第一行更改[ 1, 2, 3, 4 ]
的存在,因为该数组已存在于内存中。后续调用每个都分配一个新数组并将其分配给a
。
答案 1 :(得分:1)
由于a
未被修改(您只是将其设置为相同的值),for
循环按预期进行。您期望的是for
循环在重新分配a
时重新启动,但这不会发生。
相反,要使其无限,请尝试:
a = [1,2,3,4,5,6,7,8,9]
for i in a:
print i
a.append(i)
答案 2 :(得分:0)
我不知道,为什么你需要这个,但这可能对你有帮助
a = [1,2,3,4,5,6,7,8,9]
for i in a:
print i
a.append(10) #or anything else-))
use this tool查看代码中发生的情况。
答案 3 :(得分:0)
您甚至不仅可以修改列表的内容,还可以修改变量的值,并且您将获得相同的结果。
a = [1,2,3,4,5,6,7,8,9]
for i in a:
print i
a = "Hello World!"
在for
中加载了值,因此不会考虑循环内的任何修改。