我跑這塊代碼和輸出是令人驚訝的。我知道我正在重複使用我,我的問題是爲什麼在我重新分配後的第一次迭代之後,循環沒有退出!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) –