python study

python) global 키워드와 nonlocal 키워드

mhe1239 2024. 11. 12. 22:30

python은 기본적으로 변수를 선언하면 전역변수(global variable)가 된다.

그렇기에 함수 안에 변수를 선언하면 지역변수(Local variable)가 된다.

 

이 글은 python에서 전역 변수를 함수안에서 사용하는 방법에 대한 글이다.

 

c=18

def f(a,b):
    return a+b+c

def main():
    print(f(6,12))
    print(c)

if __name__=='__main__':
    main()
#output:
#36
#18

 

위의 코드와 같이 전역 변수로 선언한 변수를 다른 함수에 사용한다고 한다고 하면 그냥 그 전역 변수를 함수에 쓰면 된다.

 

 

c=18

def f(a,b):
    global c
    c+=1
    return a+b+c

def main():
    print(f(6,12))
    print(c)

if __name__=='__main__':
    main()
#output:
#37
#19

위와 같이 만약 함수 안에서 전역 변수의 값을 직접적으로 바꾸고 싶다면 위에 global 키워드를 쓰는 것이다.

 

c=18
def f(a,b):
    c+=1
    return a+b+c

def main():
    print(f(6,12))
    print(c)
if __name__=='__main__':
    main()

#UnboundLocalError: cannot access local variable 'c' where it is not associated with a value

global 키워드를 사용하지 않으면 지역변수 c에 접근할 수 없다며 오류가 난다.



잘 알려져있지는 않지만 파이썬에서는 nonlocal 키워드가 있다.

파이썬에서 함수 안의 중첩된 함수에서 사용되며, 현재 함수의 바로 바깥쪽에 있는 함수의 변수에 접근할 수 있도록 해준다.

def outf():
    n=10
    def inf():
        nonlocal n
        n+=1
        print(n)
    inf()
    n+=2
    print(n)

outf()

위 코드에서 inf 함수 안에 x를 정의히면 x는 outf 함수에서 참조하게 된다.

여기서 함수안에 함수의 경우 def 키워드를 사용하고, nonlocal 키워드를 적어야 오류가 나지 않는다.