我运行了这段代码,输出令人惊讶。我知道我正在重用我,我的问题是为什么自从我被重新分配后,第一次迭代后循环不退出!
码:
for i in range(3):
print '====='
print 'Outer I: ', i
print '====='
for j in range(2):
print 'J', j
for i in range(5):
print 'Inner I', i
print '====='
print 'Outer I Again: ', i
print '====='
输出:
=====
Outer I: 0
=====
J 0
Inner I 0
Inner I 1
Inner I 2
Inner I 3
Inner I 4
J 1
Inner I 0
Inner I 1
Inner I 2
Inner I 3
Inner I 4
=====
Outer I Again: 4
=====
=====
Outer I: 1
=====
J 0
Inner I 0
Inner I 1
Inner I 2
Inner I 3
Inner I 4
J 1
Inner I 0
Inner I 1
Inner I 2
Inner I 3
Inner I 4
=====
Outer I Again: 4
=====
=====
Outer I: 2
=====
J 0
Inner I 0
Inner I 1
Inner I 2
Inner I 3
Inner I 4
J 1
Inner I 0
Inner I 1
Inner I 2
Inner I 3
Inner I 4
=====
Outer I Again: 4
这是令人困惑的事情:
我希望循环在第一次迭代后会中断,但是
才不是。
出于同样的原因,第一个打印语句“ Outer I”
打印正确的i值。
第二个外部印刷声明
“再次我外”打印错误的值。
我正在使用CPython在Python 2.7上运行它。
最佳答案
此代码中没有内部i
或外部i
,只有一个i
变量在两个不同的循环中分配。
为什么循环在第一次迭代后就中断? Python的for
基本上是其他语言中的for each
循环,它在给定的迭代器或生成器的成员上进行迭代。 range
函数返回元素[0,1,2,3,4]
的列表,并且每次迭代i
都从列表中获得下一个值,i
的当前值与外循环无关紧要。
这就是为什么第一个Outer I
打印您期望的i
值,而第二个(内部循环之后)不打印的原因。
关于python - Python Block Scope-有人对此进行了解释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40739741/