변수의 액세스 범위(Scope)은 어디서 변수를 읽고 쓸 수 있는지를 결정하는 중요한 개념이다.
파이썬은 이 규칙을 LEGB 룰에 따라 처리한다.
| 범위 종류 | 의미 | 예시 |
|---|---|---|
| Local | 함수 내부에서 정의된 변수 | 함수 안에서만 사용 가능 |
| Enclosing | 중첩 함수의 바깥 함수에 있는 변수 | 내부 함수에서 접근 가능 |
| Global | 모듈(파일) 전체에서 정의된 변수 | 함수 바깥에서 정의된 변수 |
| Built-in | 파이썬이 제공하는 기본 함수와 변수 | len, print, range 등 |
함수 내부에서 선언된 변수를 지역(Local) 변수라고 한다.
def my_func():
x = 5
print(x)
inner() 함수는 자신보다 바깥에 있는 outer() 함수의 변수 x를 사용할 수 있다.
def outer():
x = 10
def inner():
print(x) # Enclosing 영역의 x 사용
inner()
outer()
nonlocal은 바로 바깥 함수의 변수를 수정할 때 사용한다.
def outer():
x = 10
def inner():
nonlocal x
x = 20
inner()
print("outer 내부 x =", x)
outer() # 출력: outer 내부 x = 20
함수 외부에서 전역으로 선언된 변수를 Global 변수라고 한다.
x = 10 # Global 변수
def my_func():
x = 5 # Local 변수
print("함수 내부:", x)
my_func()
print("함수 외부:", x)
global 변수로 선언하면 함수 내부에서도 전역 변수에 접근하여 값을 변경할 수 있다. 함수 내부에서 같은 이름의 변수를 새로 만드는 것이 아니라, 바깥의 전역 변수를 참조 및 수정하게 된다.
x = 10
def change():
global x
x = 20
change()
print(x) # 20