我跑这块代码和输出是令人惊讶的。我知道我正在重复使用我,我的问题是为什么在我重新分配后的第一次迭代之后,循环没有退出!Python块范围 - 有人解释这
代码:
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的正确值。
- 第二个外部打印语句 “外面的我再次”打印错误的值。
我在Python 2.7上用CPython运行这个。
你的代码是错误的,你在内循环中重复使用'i'变量:'为我在范围内(5):' – EdChum
做一件事,可能你会找到你想要的。用另一个变量** k **替换内部的i **。你会看到它会像魔术一样工作! ;) –
Python中没有块范围。请参阅[范围规则简要说明](http://stackoverflow.com/questions/291978/short-description-of-scoping-rules)和[在Python中限制范围](http://stackoverflow.com/questions/6167923/block-scope-in-python) –