gpt4 book ai didi

python - 在 python 的两层循环中使用相同的变量时发生了什么?

转载 作者:太空狗 更新时间:2023-10-29 21:13:41 24 4
gpt4 key购买 nike

我测试以下代码:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com