오류 내용을 봅시다. 처음 보는 UnboundLocalError입니다. Unbound는 ‘매여 있지 않은’, ‘해방된’이라는 뜻이고, Local은 지역을 뜻합니다. 즉, 지역을 벗어난 오류란 의미죠. 지역변수는 특정 지역에서만 사용한다고 했습니다. 코드에서 변수 a와 b는 함수 외부에 정의되어 있으므로 전역변수입니다. 이런 전역변수의 값을 함수 안에서 수정하려고 해서(a += 2) 오류가 발생한 겁니다.
a, b의 값을 수정하는 부분을 주석 처리한 후 다시 실행해 봅시다.
def func1():
# a += 2
# b *= 2
print(a, b)
a, b = 5, 10
func1()
실행결과
5 10
오류가 발생하지 않습니다. 무슨 차이일까요? 함수 내부에서는 전역변수의 값을 변경할 수 없고 읽을 수만 있습니다. 그래서 a += 2, b *= 2를 주석 처리하고 실행하면 print(a, b)는 실행됩니다.
정리하면, 지역변수는 함수 내부에서만 값을 읽고 변경할 수 있습니다. 전역변수는 프로그램 전역에서 값을 읽을 수 있지만, 함수 내부에서 값을 변경할 수 없습니다.