문제

이 질문은 이미 여기에 답이 있습니다.

나는 이것을 알아 내려고 노력하고있다 :

c = 1
def f(n):
    print c + n 
def g(n):
    c = c + n

f(1) => 2
g(1) => UnboundLocalError: local variable 'c' referenced before assignment

감사!

도움이 되었습니까?

해결책

함수 내에서 할당 된 변수는 기본적으로 로컬 변수로 취급됩니다. 글로벌 변수에 할당하려면 global 성명:

def g(n):
    global c
    c = c + n

이것은 실제로 나와 잘 어울리지 않은 파이썬의 기발한 영역 중 하나입니다.

다른 팁

글로벌 상태는 피해야 할 것입니다. 특히 돌연변이를해야합니다. 고려하십시오 g() 단순히 두 개의 매개 변수를 가져와야합니다 f() 그리고 g() 공통 계급의 방법이어야합니다 c 인스턴스 속성

class A:
    c = 1
    def f(self, n):
        print self.c + n
    def g(self, n):
        self.c += n

a = A()
a.f(1)
a.g(1)
a.f(1)

출력 :

2
3

에 대한 오류 그렉의 게시물:

아니요 그들이 참조하기 전에. 구경하다:

x = 1
def explode():
    print x # raises UnboundLocalError here
    x = 2

참조 후 x가 할당 되더라도 폭발합니다. 파이썬 변수에서 로컬 또는 외부 범위가있을 수 있으며 하나의 기능에서는 변경할 수 없습니다.

Greg가 말한 것 외에는 Python 3.0에서 "여기에는"여기에 정의 된 일부 이름이 있습니다 "라고 진술하지 않을 것입니다. 글로벌과 달리 해당 이름은 이미 현재 범위 밖에서 정의되어야합니다. 이름과 변수를 쉽게 추적 할 수 있습니다. 요즘 당신은 "글로벌 무언가"가 정확히 정의되는 곳을 확신 할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top