#함수 매개변수로 정의된 지역 변수 a와 함수 내부에 정의되지 않은 변수 b등 두 개의 변수를 읽는 함수를 정의하고 테스트
# 지역 및 전역 변수를 읽는 함수
def f1(a):
print(a)
print(b)
f1(3) #전역변수 b에 값을 할당하고 f1()을 호출
b = 6
f1(3)
파이썬이 함수 본체를 컴파일할 때 b가 함수 안에서 할당되므로 b를 지역 변수로 판단하고, 생성된 바이트코드를 보면 이 판단에 의해 지역 환경에서 변수 b를 가져오려 한다는 것을 알 수 있고, f2(3)을 호출할 때 f2의 본체는 지역 변수a의 값을 출력하지만, 지역 변수 b의 값을 가져오려 할 땐 바이딩되지 않는다.
버그가 아닌 설계 결정 사항으로 파이썬은 변수가 선언되어 있기를 요구하지 않지만, 함수 본체 안에서 할당된 변수는 지역 변수로 판단한다.
b = 6
def f3(a):
global b
print(a)
print(b)
b = 9
f3(3)