Python에서 함수가 실행될 때 변수의 검색 순서는 LEGB라고 불립니다. 이는 Local, Enclosing, Global, 그리고 Built-in을 의미하는 단어의 이니셜들을 나타내며, 변수를 찾을 때 이 순서대로 검색을 진행합니다. 이번 블로그 포스트에서는 각각의 검색 순서에 대해 자세히 알아보겠습니다.
1. Local (지역 변수)
함수 내에서 선언된 변수는 해당 함수가 호출될 때 생성되며, 로컬 변수라고 불립니다. 이 변수는 함수 내에서만 유효하며, 함수가 종료될 때 함께 소멸됩니다. 로컬 변수는 함수 내에서만 접근 가능하며, 다른 함수나 전역에서는 사용할 수 없습니다.
def my_function():
x = 10 # 로컬 변수
print(x)
my_function() # Output: 10
print(x) # Error: NameError: name 'x' is not defined
2. Enclosing (내포된 함수의 변수)
Python은 함수 안에 다른 함수를 정의할 수 있습니다. 이 때, 내포된 함수는 내포하는 함수의 변수에 접근할 수 있습니다. 이러한 변수를 내포된 변수라고 합니다. 내포된 함수는 모든 외곽 함수에서 정의된 변수를 참조할 수 있습니다.
def outer_function():
x = 10 # 외곽 함수의 로컬 변수
def inner_function():
print(x) # 외곽 함수의 로컬 변수에 접근
inner_function()
outer_function() # Output: 10
3. Global (전역 변수)
전역 변수는 어떤 함수나 클래스의 외부에서 정의되고, 모든 함수가 참조할 수 있는 변수입니다. 전역 변수를 다른 함수 안에서 수정할 수도 있습니다. 만약 함수 안에서 전역 변수와 동일한 이름의 로컬 변수가 있을 경우, 로컬 변수가 우선시됩니다.
x = 10 # 전역 변수
def my_function():
x = 20 # 로컬 변수
print(x)
my_function() # Output: 20
print(x) # Output: 10
x = 10 # 전역 변수
def my_function():
global x # 전역 변수 사용 선언
x = 20 # 전역 변수 변경
print(x)
my_function() # Output: 20
print(x) # Output: 20 (전역 변수 변경됨)
4. Built-in (내장 변수)
파이썬은 기본적으로 내장된 변수와 함수들을 제공합니다. 이러한 변수와 함수들은 내장 변수라고 불립니다. 예를 들어, print()
와 같은 함수를 사용할 때, 우리는 파이썬에 내장된 print()
함수를 호출하게 됩니다.
내장 변수와 함수의 목록은 Python 공식 문서에서 찾아볼 수 있습니다.
print('Hello, World!') # Output: Hello, World!
LEGB 변수 검색 순서는 Python에서 변수의 스코프를 결정하는 중요한 개념입니다. 이를 이해하는 것은 좋은 코드를 작성하는 데 도움이 됩니다. 제대로 된 변수의 스코프와 범위를 고려하면, 코드를 더욱 모듈화하고 가독성이 좋은 프로그램을 작성할 수 있습니다.