수년간 프로그래밍을 해왔고, 최근에 파이썬을 배우기 시작했습니다. 아래의 코드는 제가 예상했던대로 파이썬 2.5와 3.0에서 정상적으로 작동하는데요 :
a, b, c = (1, 2, 3)
print(a, b, c)
def test():
print(a)
print(b)
print(c) # (A)
#c+=1 # (B)
test()
현재 주석처리된 line (B)의 주석을 해제하면, line (A)에서 UnboundLocalError: 'c' not assigned 라는 에러가 발생합니다. 변수 a와 b는 정상적으로 출력되는데 말이죠. 이로 인해 두가지 의문점이 생겼습니다 :
- 왜 line (A)보다 뒤에 나오는 line (B)로 인해 line (A)에 에러가 발생하는가
- 왜 변수 a와 b는 정상적으로 출력이 되는데 변수 c는 에러를 일으키는가
제가 생각해 낼 수 있는 유일한 이유는 지역변수 c가 c+=1
에 의해 생성되면서, 지역변수가 생성되기도 전에 "전역"변수 c보다 지역변수가 우선되었기 때문이라는 겁니다. 물론, 지역변수가 존재하기도 전에 변수 범위를 소위 뺏어간다는 부분은 앞뒤가 맞지 않는 것 같습니다.
이 문제에 대한 설명을 부탁드립니다.