이번에는 클로져(Closure)에 대해 알아보자.
클로져에 대해 알기 위해서는 파이썬의 내부함수 구조를 이해해야한다.
내부함수(inner)
내부함수는 중첩의 개념으로 쉽게 말해, 함수 안의 함수를 의미한다.
함수 안에서 또 다른 함수가 선언되는 것이다.
>>> def outer(num):
def inner(a, b):
return a + b
return inner(num, 20)
>>> num = 10
>>> result = outer(num)
>>> result
30
구조 자체는 어렵지 않다.
클로져(Closure)
클로저의 기본 구조도 내부함수와 유사하다.
클로져의 가장 큰 특징을 2 가지로 설명하고 있다. ( 책에서 )
# 내부함수가 외부함수의 인자값을 직접 접근할 수 있다.
# 함수 호출 시, 내부함수를 직접 호출하지 않지만, 반환한다.
클로져를 선언하는 구조는 아래와 같이 내부함수와 유사하다.
단, 내부함수를 직접 호출하지 않고 있다.
>>> def outer(word):
def inner():
return "Word : %s" % word
return inner
이렇게 생성한 클로져를 사용해보자.
>>> word = "Closure"
>>> func = outer(word)
>>> func
<function outer.<locals>.inner at 0x000000F86F00BC10>
>>> func()
'Word : Closure'
클로져를 사용해보면, 결과로는 'inner()' 함수가 호출되고 외부함수의 인자값을 전달하지 않아도 사용한 것을 확인할 수
있다.
이는 외부 함수가 호출되면서, 내부함수의 복사본을 내부적으로 하나 생성해서 반환하기 때문이다.
때문에 내부함수로 인자를 전달하지 않아도 외부함수의 파라미터 값을 사용할 수 있는 것이다.
'STUDY > Python' 카테고리의 다른 글
[Python] 예외처리(try-except) (0) | 2020.02.23 |
---|---|
[Python] 함수 (0) | 2020.02.17 |
[Python] 조건문 & 제어문 (0) | 2020.02.16 |
[Python] 리스트 & 튜플 (0) | 2020.02.09 |
[Python] 변수 및 기본타입 (0) | 2020.02.09 |