복붙노트

[PYTHON] 파이썬 범위 [duplicate]

PYTHON

파이썬 범위 [duplicate]

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

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

감사!

해결법

  1. ==============================

    1.함수 내에서 할당 된 변수는 기본적으로 로컬 변수로 취급됩니다. 전역 변수에 할당하려면 전역 명령문을 사용하십시오.

    함수 내에서 할당 된 변수는 기본적으로 로컬 변수로 취급됩니다. 전역 변수에 할당하려면 전역 명령문을 사용하십시오.

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

    이것은 실제로 절 잘 앉지 않는 파이썬의 기발한 영역 중 하나입니다.

  2. ==============================

    2.전지구 적 국가는 피할 수밖에 없으며 특히 돌연변이를 필요로합니다. g ()가 단순히 두 개의 매개 변수를 가져야하는지 또는 f () 및 g ()가 인스턴스 속성이있는 공통 클래스의 메소드 일 필요가 있는지 고려하십시오

    전지구 적 국가는 피할 수밖에 없으며 특히 돌연변이를 필요로합니다. g ()가 단순히 두 개의 매개 변수를 가져야하는지 또는 f () 및 g ()가 인스턴스 속성이있는 공통 클래스의 메소드 일 필요가 있는지 고려하십시오

    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
    
  3. ==============================

    3.그렉의 게시물에 대한 정오표 :

    그렉의 게시물에 대한 정오표 :

    그들이 언급되기 전에 반드시 있어야합니다. 보세요: x = 1 def explode () :     x #를 인쇄하면 UnboundLocalError가 발생합니다.     x = 2

    그것은 참조 된 후에 x가 할당 되더라도 폭발합니다. 파이썬에서 변수는 로컬이거나 외부 범위를 참조 할 수 있으며 한 함수에서 변경할 수 없습니다.

  4. ==============================

    4.Greg가 말했던 것 이외에, Python 3.0에서 "여기에 둘러싸인 범위에 정의 된 일부 이름이 있습니다."라는 비 지역 선언이있을 것입니다. 전역과 달리이 이름은 현재 범위 외부에서 이미 정의되어야합니다. 이름과 변수를 쉽게 추적 할 수 있습니다. 요즘에는 "전역 적 무언가"가 정확히 정의되어 있는지 알 수 없습니다.

    Greg가 말했던 것 이외에, Python 3.0에서 "여기에 둘러싸인 범위에 정의 된 일부 이름이 있습니다."라는 비 지역 선언이있을 것입니다. 전역과 달리이 이름은 현재 범위 외부에서 이미 정의되어야합니다. 이름과 변수를 쉽게 추적 할 수 있습니다. 요즘에는 "전역 적 무언가"가 정확히 정의되어 있는지 알 수 없습니다.

  5. from https://stackoverflow.com/questions/146359/python-scope by cc-by-sa and MIT license