global vs nonlocalglobal과 nonlocal은 파이썬 함수 내부에서 변수의 범위(scope)를 제어할 때 사용하는 키워드입니다.
전역 변수(global variable)를 함수 안에서 읽고 수정할 수 있게 해줍니다.
x = 10
def modify():
global x
x = 20
modify()
print(x) # 출력: 20
global x 없으면 함수 내부의 x는 지역변수로 간주되어 바깥의 x에 영향을 주지 않음.바깥 함수(지역 범위)의 변수를 내부 함수에서 수정할 때 사용합니다. (중첩 함수에만 사용 가능)
def outer():
x = 10
def inner():
nonlocal x
x = 20
inner()
print(x)
outer() # 출력: 20
nonlocal 없으면 inner()의 x는 새로운 지역변수가 되어 outer()의 x에 영향을 주지 않음.| 키워드 | 적용 대상 범위 | 사용 위치 | 목적 |
|---|---|---|---|
global | 모듈(전역) 범위 | 함수 내부 | 전역 변수 읽기/수정 |
nonlocal | 중첩 함수의 바깥 함수 | 중첩 함수 내부 | 지역변수(외부 함수의) 수정 가능하게 |
둘 다 변수의 스코프를 명확히 지정해주기 위해 쓰이는 도구입니다.
중첩 함수 쓰는 경우 아니면 nonlocal은 잘 안 쓰입니다.