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 키워드를 적어야 오류가 나지 않는다.