a = 5
b = [1, 2, 3, 4, 5]
def may():
a = a + 1
print(a)
may()
def june():
b[0] = 0
print(b)
june()
def july():
b = b + [6]
print(b)
july()
이 경우 제대로 실행되는건 june() 함수 뿐이다.
may(), july()는
UnboundLocalError: local variable 'b' referenced before assignment
이라는 오류가 발생한다.
지역에서 ' a = '을 치는 순간 a라는 로컬변수가 생성되고, 따라서 등호 다음에 나오는 a + 1 에서 컴퓨터는 a라는 로컬변수 값을 가져오려고 한다. 하지만 로컬 변수 a 라는것을 정의하고 있는 과정이지 아직 컴퓨터는 a의 값을 모르기 때문에 가져올수 없다는 내용의 오류가 발생한다.
리스트의 경우도 마찬가지인데, 로컬변수 b의 값을 모르기 때문에 [6]을 더할수가 없다.
이런 오류를 맞닥뜨린다면 아마 [ 전역변수 a = 전역변수 a + 1 ] 을 생각했을 것이고, 6이 프린트 되기를 바랐을 것이다. 이런 경우에는 global a 라고 선언해주면 된다.
def aug():
global a
a = a + 1
print(a) # 6
aug()
print(a) # 6
문제 풀 때 속도 생각하기.