Develop Story/python

closure

꿈꾸는만학도 2023. 10. 31. 14:09

함수를 둘러싼 환경(지역변수, 코드등)을 계속 유지하다가 함수를 호출할 때 다시 꺼내서 사용하는 함수를 클로저(closure)라고 한다. 

 

예시를 보자.

def calc():
    a = 3
    b = 5
    def mul_add(x):
        return a *  x + b
    return mul_add



if __name__ == '__main__':
    c = calc()
    print(c(1), c(2), c(3), c(4), c(5))

위에 예시에서 c에 저장된 함수가 클로저이다. 

 

다음 예시를 하나 더 보자..

 

def mul(m):
    def wrapper(n):
        return m * n
    return wrapper


if __name__ == "__main__":
    mul3 = mul(3)
    mul5 = mul(5)

    print(mul3(10))  # 30 출력
    print(mul5(10))  # 50 출력

위에서 mul 함수가 바로 클로저 인 것이다. 

 

즉, 정리해보면 함수와 해당 함수가 가지고 있는 데이터를 함께 복사, 저장해서 별도 함수로 활용하는 방법으로 외부함수가 소멸되더라도, 외부 함수 안에 있는 로컬 변수 값과 중첩함수를 사용할수 있는 것을 클로저라 한다.

 

del mul로 위의 함수를 지운다해도 mul3, mul5함수는 그대로 살아 있음 

그래서 mul3(10), mul5(10)은 사용할수가 있다.

 

마지막으로 한가지 예시를 더 보자.  

def power_cal(num):
    def power(digit):
        return digit ** num
    return power


if __name__ == '__main__':
    list_data = list()

    for number in range(1, 6):
        list_data.append(power_cal(number))

    for function in list_data:
        print(function(2))


 

'Develop Story > python' 카테고리의 다른 글

decorator  (0) 2023.11.05
First class function  (0) 2023.10.31