2017-03-03 1 views
2

다음과 같은 코드가 목록에 있습니다. 코드가 작동 아래UnboundLocalError : 할당 전에 로컬 변수 'y'가 참조되었습니다.

x = 2 
y = 3 

[x*y for x in range(x) for y in range(y)] 

이,

Traceback (most recent call last): 
    File "<pyshell#35>", line 1, in <module> 
    [x*y for x in range(x) for y in range(y)] 
    File "<pyshell#35>", line 1, in <listcomp> 
    [x*y for x in range(x) for y in range(y)] 
UnboundLocalError: local variable 'y' referenced before assignment 

그러나 오류 아래 저를주고있다.

[x*y for x in range(x)] 
[0, 5] 

목록 이해에서 두 번째 for 루프의 범위 규칙이 있습니까?

저는 파이썬 3.6을 사용하고 있습니다.

+0

@Chris_Rands : 가능한 중복 게시물은 UnboundLocalError 및 목록 이해를위한 범위 지정 규칙에 대해 이야기하지 않습니다. –

답변

1

좋은 질문이지만이 코드는 Python2.x에서 잘 작동하고 UnboundLocalErrorPython3.x에 포함됩니다. 당신이 범위에 변수에 할당을 할 때, 그 변수가 범위를 지역 이되고 외부 범위에있는 비슷한 이름의 변수를 그림자 때문에

It can be a surprise to get the UnboundLocalError in previously working code when it is modified by adding an assignment statement somewhere in the body of a function.

입니다. x에 새로운 값을 할당하기 때문에 컴파일러는이를 로컬 변수으로 인식합니다. 따라서 이전 변수는 초기화되지 않은 지역 변수를 인쇄하려고 시도하고 오류가 발생합니다.

자세한 내용은 Why am I getting an UnboundLocalError when the variable has a value?을 참조하십시오.

+0

그렇다면 for 루프는 목록 이해에 지역 범위가 있습니까? 내 이해에 따라 루프 모듈 수준에서 만든 모든 로컬 범위를 만들지 않습니다. –

관련 문제