본문 바로가기
Computer & Program/python

[python] closure(클로저)

by TDRemon 2024. 2. 17.
반응형

안녕하세요. TDR입니다.

오늘은 python에서 closure(클로저)라는 개념에 대해서 정리해 보겠습니다.

closure란, 함수와 함수가 선언된 환경을 함께 가지는 개념을 말합니다. 이렇게 말하면 무슨 말인지 하나도 이해가 안가기 때문에 간단한 예시를 보면,

def outer_function(x):
    y = 10 
    # 내부 함수를 정의하고 반환 (클로저)
    def inner_function(z):
        return x + y + z
    return inner_function

# outer_function 호출. closure_func에는 inner_function이 저장되어 있음
closure_func = outer_function(5)

# outer_function 내부에 있는 변수 y에 접근할 수 있음
print(closure_func(3))  # 18 :5(x) + 10(y) + 3(z)

위와 같이 함수 내부에서 함수를 구현했을 때 외부 함수가 종료 됐음에도 내부 함수가 외부 함수의 환경(선언된 변수, 할당된 변수 등)에 접근 가능한 것을 말합니다.

python은 인터프리터 언어이기 때문에 동작이 컴파일 언어와는 다른데, 위와 같은 경우 스택에서 실행 흐름만 넘어가고 해당 환경들은 유지 시킴으로서 외부 함수  호출이 끝났음에도 내부 함수에서 외부 함수의 환경에 접근 가능합니다.

참고로 아래와 같이 단순히 함수를 변수에 할당하여 사용하는 것은 바인드(Bind)라고 합니다.

def what_is_your_name(name):
    return 'My name is ' + name

# bind_func에 what_is_your_name 함수 바인드
bind_func = what_is_your_name

print(bind_func('tdremon')	# My name is tdremon

python에서는 함수를 first-class 객체로 취급하기 때문에 가능한 표현입니다.

반응형

'Computer & Program > python' 카테고리의 다른 글

[python] function(함수) - 02  (0) 2024.02.22
[python] function (함수) - 01  (1) 2024.02.21
[python] lambda(람다)  (0) 2024.02.16
[python] reduce 함수  (0) 2024.02.15
[python] filter 함수  (0) 2024.02.14

댓글