편집 기록

편집 기록
  • 프로필 김선우님의 편집
    날짜2018.06.21

    파이썬 변수 범위 문제


    수년간 프로그래밍을 해왔고, 최근에 파이썬을 배우기 시작했습니다. 아래의 코드는 제가 예상했던대로 파이썬 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 라는 에러가 발생합니다. 변수 ab는 정상적으로 출력되는데 말이죠. 이로 인해 두가지 의문점이 생겼습니다 :

    1. 왜 line (A)보다 뒤에 나오는 line (B)로 인해 line (A)에 에러가 발생하는가
    2. 왜 변수 ab는 정상적으로 출력이 되는데 변수 c는 에러를 일으키는가

    제가 생각해 낼 수 있는 유일한 이유는 지역변수 c가 c+=1에 의해 생성되면서, 지역변수가 생성되기도 전에 "전역"변수 c보다 지역변수가 우선되었기 때문이라는 겁니다. 물론, 지역변수가 존재하기도 전에 변수 범위를 소위 뺏어간다는 부분은 앞뒤가 맞지 않는 것 같습니다.

    이 문제에 대한 설명을 부탁드립니다.

  • 프로필 이두헌님의 편집
    날짜2016.08.11

    파이썬 변수 범위 문제


    수년간 프로그래밍을 해왔고, 최근에 파이썬을 배우기 시작했습니다. 아래의 코드는 제가 예상했던대로 파이썬 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 라는 에러가 발생합니다. 변수 ab는 정상적으로 출력되는데 말이죠. 이로 인해 두가지 의문점이 생겼습니다 :

    1. 왜 line (A)보다 뒤에 나오는 line (B)로 인해 line (A)에 에러가 발생하는가
    2. 왜 변수 ab는 정상적으로 출력이 되는데 변수 c는 에러를 일으키는가

    제가 생각해 낼 수 있는 유일한 이유는 지역변수 c가 c+=1에 의해 생성되면서, 지역변수가 생성되기도 전에 "전역"변수 c보다 지역변수가 우선되었기 때문이라는 겁니다. 물론, 지역변수가 존재하기도 전에 변수 범위를 소위 뺏어간다는 부분은 앞뒤가 맞지 않는 것 같습니다.

    이 문제에 대한 설명을 부탁드립니다.