파이썬의 전역변수와 지역변수를 다루며
"할당 전에 참조되는 로컬변수"라는 개념에 대해 알게 되었다.
a = 10
def prac():
print(a)
print(a)
prac()
변수 a가 prac함수 안에 존재하지 않으니
a를 전역네임스페이스에서 함수안으로 땡겨와 사용할 수 있게 한 것이다.
하지만 다음의 코드를 보자
a = 10
def prac2():
a += 10
print(a)
print(a)
prac2()
위의 코드는 local variable 'a' referenced before assignment 에러가난다
왜 "prac()에서는 a가 없을때 전역네임스페이스에서 잘 가져왔는데 prac2()에서는 가져오지 못하는걸까 ?"라고 생각했다.
이유는 앞서 말한 "할당 전에 참조되는 로컬변수"때문인데 prac2()안의 a+=10 부분에서 할당이 이루어진다.
하지만 이 때 파이썬은 a를 네임스페이스에서 가져오지 않고
새로운 지역변수의 선언이라 알아듣기에
먼저 참조가 되지않았다는 에러가 발생하는 것이다.
따라서 global선언 없이 함수 내에서 전역변수를 사용할 경우
print(a) , if a == 1: 과 같이 조회하는 기능만 가능하다.
a값을 변경하는 것과 같이 "할당"을 해주려면 global선언이 필수적이다.
a = 10
def prac2():
global a
a += 10
print(a)
print(a)
prac2()
#출력1 : 10
#출력2 : 20