[파이썬] 함수의 변수 검색 순서 (LEGB)

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에서 변수의 스코프를 결정하는 중요한 개념입니다. 이를 이해하는 것은 좋은 코드를 작성하는 데 도움이 됩니다. 제대로 된 변수의 스코프와 범위를 고려하면, 코드를 더욱 모듈화하고 가독성이 좋은 프로그램을 작성할 수 있습니다.