클로저를 이해하기 위해서 변수와 스코프 개념 정리
- global 키워드를 사용해서 전역 변수에 접근할 수 있다.
- nonlocal 키워드를 사용해서 지역 변수에 접근할 수 있다.
- 파이썬에서 변수는
namespace (이름 공간)
에 저장된다.
- locals 함수를 사용하면 현재 네임스페이스를 딕셔너리 형태로 출력할 수 있다.
- 함수 안에 함수를 만들었을 때, 바깥 함수에 정의된 지역 변수는 안쪽 함수에서 참조할 수 있다.
함수를 클로저 형태로 만드는 방법
def add():
a = 1
def add_1(x):
return x + a
return add_1
a = add()
print(a(0), a(1), a(2), a(3), a(4))
- 함수 add_1 를 만든 후, 이 함수를 바로 호출하지 않고 return 으로 함수 자체를 반환한다.
- 함수를 반환할 때는 함수 이름만 반환하며 () 는 붙이지 않는다.
- 클로저는 지역 변수와 코드를 묶어서 사용하고 싶을 때 활용한다.
- 클로저는 내부 함수를 뱉어내기 때문에 람다식으로 사용할 수 있다.
클로저: 지역 변수 연산 후 기억
def test():
total = 0
def calc(x):
nonlocal total
total = total + 2
return total
return calc
t = test()
정리
- 클로저는 함수를 둘러싼 환경(지역 변수, 코드 등)을 유지하다가, 함수를 호출할 때 다시 꺼내서 사용하는 함수를 뜻한다.
- 지역 변수와 코드를 묶어서 사용하고 싶을 때 활용한다.
- 클로저에 속한 지역 변수는 바깥에서 접근할 수 없으므로, 데이터를 숨기고 싶을 때 사용한다.
참고자료