我测试以下代码:
for i in range(3):
for i in range(3,5):
print "inner i: %d"%(i)
print "outer i: %d"%(i)
输出是:
inner i: 3
inner i: 4
outer i: 4
inner i: 3
inner i: 4
outer i: 4
inner i: 3
inner i: 4
outer i: 4
我不明白为什么在外循环中 i
是 4 但外循环仍然运行了 3 次。似乎 print "outer i: %d"%(i)
行中的变量 i
是内部循环中的 i
,但是当转到 for i in range(3)
时,它在外循环中使用 i。
谁能解释一下?现在我有点困惑。
最佳答案
它是相同的i
,Python 没有 block 作用域。在每个 for 循环迭代的开始,您将迭代器中的下一个值分配给 i
。 Python for 循环不像 C/Java for 循环,它们是 foreach 循环。继续直到迭代器耗尽(或者你以某种方式break
)。 for 循环等效于以下 while 循环:
iterator = iter(my_iterable)
while True:
try:
x = next(iterator)
except StopIteration:
break
do_stuff(x)
因此,您的嵌套循环等效于此:
it1 = iter(range(3))
while True:
try:
i = next(it1)
except StopIteration:
break
it2 = iter(range(3, 5))
while True:
try:
i = next(it2)
except StopIteration:
break
print "inner i: %d"%(i)
print "outer i after: %d"%(i)
注意,一个 C/Java for 循环,例如:
for (int i = 0; i < stop; i++){
do_stuff(i);
}
将在 Python 中:
i = 0
while i < stop:
do_stuff(i)
i += 1
也就是说,经典for循环依赖于i
,即终止条件依赖于i
的值。但是在 for-each 循环中,终止条件取决于迭代器。而且,无论您对体内的变量做什么,在每次迭代开始时,它都会被赋予迭代器的下一个值。
关于python - 在 python 的两层循环中使用相同的变量时发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47347945/