[파이썬] 함수의 범위와 스코프

파이썬에서 함수는 프로그래밍의 중요한 요소입니다. 함수의 범위와 스코프는 파이썬에서 이해해야 할 중요한 개념 중 하나입니다. 함수의 범위와 스코프에 대해 더 자세히 알아보도록 하겠습니다.

함수 범위 (Function Scope)

파이썬에서 함수는 독자적인 범위를 갖습니다. 즉, 함수 내에서 정의된 변수는 함수 외부에서 접근할 수 없습니다. 이렇게 함수 내에서 정의된 변수를 로컬 변수라고 합니다. 로컬 변수는 함수가 호출 될 때 생성되고, 함수 호출이 종료되면 사라집니다.

def my_function():
    x = 10
    print(x)

my_function()  # 출력: 10
print(x)  # 오류 발생: 'x' 가 정의되지 않음

위의 예제에서 xmy_function 함수 내에서 정의된 로컬 변수입니다. my_function을 호출하면 변수 x가 생성되고, 출력문이 실행되어 10이 출력됩니다. 그러나 my_function 외부에서 x에 접근하면 오류가 발생하게 됩니다.

전역 범위 (Global Scope)

파이썬에서 함수 외부에서 정의된 변수는 전역 변수입니다. 전역 변수는 프로그램 전체에서 접근할 수 있습니다.

x = 5

def my_function():
    print(x)

my_function()  # 출력: 5
print(x)  # 출력: 5

위의 예제에서 x는 함수 외부에서 정의된 전역 변수입니다. my_function 함수 내부에서 x를 출력하면 전역 변수 x의 값이 출력됩니다.

스코프 체인 (Scope Chain)

파이썬에서는 함수가 중첩될 수 있습니다. 이러한 경우, 함수는 여러 개의 스코프를 갖는데, 이를 스코프 체인이라고 합니다. 스코프 체인은 변수를 검색할 때 사용되며, 내부 함수에서는 외부 함수의 변수를 참조할 수 있습니다.

def outer_function():
    x = 10
    
    def inner_function():
        print(x)
    
    inner_function()

outer_function()  # 출력: 10

위의 예제에서 inner_function 내부에서 x를 출력하면, 외부 함수 outer_function의 변수 x의 값이 출력됩니다. 즉, 내부 함수에서는 외부 함수의 변수를 참조할 수 있습니다.

nonlocal 키워드

내부 함수에서 외부 함수의 변수를 수정하려면 nonlocal 키워드를 사용해야 합니다.

def outer_function():
    x = 10
    
    def inner_function():
        nonlocal x
        x += 5
        print(x)
    
    inner_function()

outer_function()  # 출력: 15

위의 예제에서 inner_function 내부에서 nonlocal 키워드를 사용해 x를 외부 함수인 outer_function의 변수로 지정합니다. 그런 후 x의 값을 수정하고 출력하면, 외부 함수의 변수 값이 변경되고 출력됩니다.

결론

함수의 범위와 스코프는 파이썬에서 중요한 개념입니다. 이를 제대로 이해하고 활용하면 프로그램을 더욱 구조적으로 작성할 수 있습니다. 함수의 로컬 변수와 전역 변수, 스코프 체인 및 nonlocal 키워드를 잘 활용하여 파이썬 프로그래밍을 진행해보세요.