Python: 클로저 (closer)

dev-swd·2020년 11월 2일
0

python

목록 보기
17/23
post-thumbnail

클로저를 이해하기 위해서 변수와 스코프 개념 정리

  • 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))
#  1 2 3 4 5
  • 함수 add_1 를 만든 후, 이 함수를 바로 호출하지 않고 return 으로 함수 자체를 반환한다.
  • 함수를 반환할 때는 함수 이름만 반환하며 () 는 붙이지 않는다.
  • 클로저는 지역 변수와 코드를 묶어서 사용하고 싶을 때 활용한다.
  • 클로저는 내부 함수를 뱉어내기 때문에 람다식으로 사용할 수 있다.

클로저: 지역 변수 연산 후 기억

def test():
    total = 0

    def calc(x):
        nonlocal total
        total = total + 2
        return total
    return calc

t = test()
# 2
# 4

정리

  1. 클로저는 함수를 둘러싼 환경(지역 변수, 코드 등)을 유지하다가, 함수를 호출할 때 다시 꺼내서 사용하는 함수를 뜻한다.
  2. 지역 변수와 코드를 묶어서 사용하고 싶을 때 활용한다.
  3. 클로저에 속한 지역 변수는 바깥에서 접근할 수 없으므로, 데이터를 숨기고 싶을 때 사용한다.

참고자료

profile
개발을 취미로 할 수 있는 그 때 까지

0개의 댓글