이 코드 블록을 실행했는데 결과가 놀랍습니다. 나는 내가 재사용한다는 것을 안다. 나의 질문은 왜 내가 다시 할당 된 이후 첫 번째 반복 이후에 루프가 빠져 나오지 않는가이다.파이썬 블록 스코프 - 누군가가 이것을 설명합니다
코드 :
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
다음
혼란 것들 :
- 내가 루프가 첫 번째 반복 후 휴식 기대가 있지만, 하지 않습니다.
- 같은 이유로 첫 번째 인쇄 문 "외부 I" 은 i의 올바른 값을 인쇄합니다.
- 두 번째 바깥 쪽 인쇄 문 "바깥 쪽 다시"는 잘못된 값을 인쇄합니다.
저는 파이썬 2.7에서 CPython을 사용하고 있습니다.
코드가 잘못되었습니다. 내부 루프에'i' 변수를 재사용하고 있습니다. 범위 내 (i)에 대해 : – EdChum
한 가지만하면 아마 원하는 것을 찾을 수 있습니다. ** inner **를 다른 변수 ** k **로 대체하십시오. 당신은 그것이 마술 같이 작동 할 것이라는 점을 볼 것이다 !! ;) –
Python에는 블록 범위가 없습니다. [범위 지정 규칙에 대한 간단한 설명] (http://stackoverflow.com/questions/291978/short-description-of-scoping-rules) 및 [Python에서 블록 범위] (http://stackoverflow.com/questions/6167923)를 참조하십시오./block-scope-in-python) –