변수 범위 규칙

매일 공부(ML)·2022년 12월 16일
0

Fluent Python

목록 보기
44/130

객체로서의 함수

함수 데커레이터와 클로저

변수 범위 규칙

#함수 매개변수로 정의된 지역 변수 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)
profile
성장을 도울 아카이빙 블로그

0개의 댓글