가끔 파이썬 구현 코드를 보다보면 함수 내에 global 이라고 선언해놓고 작성해둔 코드를 간간히 볼 수 있습니다. 뭘까요?
철수는 원래 선언되어 있던 값 a에 parameter로 받는 값을 더해주는 함수를 만들고 싶습니다. 그래서 아래와 같은 함수를 작성했다고 합시다.
def adding(num) :
a += num
return a
adding(3)
output
UnboundLocalError: local variable 'a' referenced before assignment
오잉? 보시면 local 변수인 a가 할당되기 전에 참조되었다고 합니다.
왜 할당하지도 않은 값을 넣었냐는 말이죠.
그래서 철수는 함수 바깥에 a = 0 으로 정의하고 다시 실행 시켜봤습니다.
a = 0
def adding(num) :
a += num
return a
adding(3)
output
UnboundLocalError: local variable 'a' referenced before assignment
똑같은 에러가 뜨는 것을 보고 철수는 머리를 쥐어싸매게 됩니다.
파이썬에선 외부에서 정의된 값을 함수 내부에서 사용하고 싶을 때 global 이라는 기능을 이용합니다.
함수 내부에서 함수 외부에 있는 변수를 사용하고자 할 때 global {변수} 를 넣어주시면 됩니다. 예시로 보는 게 제일 빠르겠죠?
a = 0
def adding(num) :
global a
a += num
return a
adding(3)
output
3
이제 원하는 결과가 정상적으로 잘 나왔음을 확인했습니다.
함수를 작성하다보면 위에처럼 local variable 뭐시깽~ 이렇게 나올 때가 있습니다.
그럼 일단 변수 명이 겹쳐있나 한번 잘 확인해보시고 변수명이 잘 되어있음에도 그렇다면 한번 함수 바로 아래에다 global 을 한번 사용해보시는 것이 좋겠습니다.