[Python] 변수의 사용범위 알아보기

    함수를 포함한 스크립트 전체에 접근할 수 있는 변수를 전역 변수,

    변수를 만든 함수안에서만 접근 할 수 있는 것을 지역변수라고 한다.

     

     

    그래서 지역변수에서 생성된 변수는 함수 밖에서 사용 할 수 없는 것이 일반적인 사실이다.

    그러나 만약 같은 이름이 있다면... 우선순위는 자기 함수 내에 있는 변수 즉, 지역변수가 우선순위이다.

     

    이 우선 순위를 변경해보자.

     

     

    함수 안에서 전역 변수 사용하기

    global 전역변수

     

    x = 10
    def foo():
        global x
        x = 20
        print(x)
        
    foo()
    print(x)

    >>>20

    >>>20

     

     

    global을 사용할 경우 x의 변수를 지역변수에서 따로 생성하지 않는다.

    기존 전역변수 x를 가져와서 전역변수 x의 값을 변경하는 모습을 볼 수 있다.

     

     

     

    함수 안에서 함수 만들기

    def print_hello():
        hello = 'Hello, world!'
        def print_message():
        	print(hello)
        print_message()
        
    print_hello()

    >>>Hello, world!

     

     

    함수 안에 함수를 만들었다. 위에서 설명한 전역변수 안에 지역변수 만들고, 다시 함수를 만들어

    가져올 수 있는 것을 볼 수 있다.

     

     

    그러나 지역변수 특징은 안쪽에 있는 함수는 바깥쪽에 있는 함수에 접근 하기가 어렵다는 점이다.

     

     

    지역 변수 변경하기

    nonlocal 지역변수

     

    def A():
        x = 10
        def B():
        	nonlocal x
            x = 20
        B()
        print(x)
    A()

    >>>20

     

    nonlocal을 x의 변수에 선언하자 전역변수에 있는 x의 값이 변경 된 것을 확인 할 수가 있다.

    global과 비슷하면서도 다르므로 이 점을 알아야 한다.

     

     

    NONLOCAL이 변수를 찾는 순서.

    def A():
        x = 10
        y = 100
        def B():
        	x = 20
            def C():
                nonlocal x
                nonlocal y
                x = x + 30
                y = y + 300
                print(x)
                print(y)
            C()
        B()
    A()

    >>>50

    >>>400

     

    nonlocal은 현재 함수의 바깥쪽에 있는 지역변수를 찾을 때 가장 가까운 함수부터 찾는다.

    그래서 C() 함수 안의 x는 B함수에 있는 x를 찾게 되었고 y는 A 함수 안에 y를 찾게 되었다.

     

    그래서 결과값은 30 + 20, 300 + 100의 모습이 된 것을 살펴 볼 수가 있다.

    반응형

    댓글

    Designed by JB FACTORY