> 백엔드 개발 > 파이썬 튜토리얼 > Python의 클로저 이해

Python의 클로저 이해

Barbara Streisand
풀어 주다: 2024-12-23 14:26:09
원래의
162명이 탐색했습니다.

Understanding Closures in Python

Python에서 클로저는 함수 실행이 완료된 후에도 함수가 생성된 환경을 "기억"할 수 있도록 하는 중요한 개념입니다. 클로저를 사용하면 전역 변수나 클래스 인스턴스를 사용하지 않고도 상태 저장 기능을 구현할 수 있습니다.

이 게시물에서는 nonlocal 키워드를 사용하여 간단한 카운터를 구현하여 클로저를 살펴보겠습니다. 자세히 살펴보겠습니다!

클로저란 무엇입니까?

클로저는 중첩된 함수가 바깥쪽 범위의 변수를 참조할 때 발생하며, 바깥쪽 함수의 실행이 완료된 후에도 해당 변수에 대한 액세스를 유지할 수 있습니다. 클로저는 함수 내에서 상태나 동작을 캡슐화하려는 경우 특히 유용합니다.

비로컬 키워드

Python에서는 nonlocal 키워드를 사용하여 전역이 아닌 가장 가까운 바깥쪽 범위의 변수를 수정합니다. nonlocal 키워드가 없으면 내부 함수는 바깥쪽 범위의 변수를 수정할 수 없습니다. 대신 새로운 지역 변수를 생성합니다. nonlocal 키워드는 바깥쪽 범위의 변수로 작업하고 싶다고 Python에 알려줌으로써 이 문제를 해결합니다.

클로저로 카운터 구현하기

전역 변수나 클래스에 의존하지 않고 클로저를 사용하여 개수를 추적하는 간단한 카운터 함수를 만들어 보겠습니다.

1단계: make_counter 함수 정의

내부 함수 증분을 반환하는 make_counter라는 함수를 생성하겠습니다. 내부 함수는 호출될 때마다 count 변수를 증가시킵니다.

2단계: nonlocal을 사용하여 카운트 변수 수정

increment 함수가 make_counter 함수 범위에 정의된 count 변수를 수정하는지 확인하기 위해 nonlocal 키워드를 사용합니다.

구현은 다음과 같습니다.

def make_counter():
    count = 0  # Variable in the enclosing scope

    def increment():
        nonlocal count  # Tell Python to modify the `count` from the enclosing scope
        count += 1  # Increment the counter
        return count  # Return the current count

    return increment  # Return the inner function, which forms the closure
로그인 후 복사

3단계: 카운터 사용

이제 make_counter 함수가 있으므로 카운터 인스턴스를 만들고 여러 번 호출하여 카운터 증가를 확인할 수 있습니다.

counter = make_counter()

print(counter())  # Output: 1
print(counter())  # Output: 2
print(counter())  # Output: 3
print(counter())  # Output: 4
print(counter())  # Output: 5
로그인 후 복사

설명

  • count 변수는 make_counter 함수 내에서 0으로 초기화됩니다.
  • 증분 함수(make_counter에 의해 반환됨)를 호출할 때마다 nonlocal 키워드를 사용하여 바깥쪽 범위의 count 변수를 수정합니다. 클로저 속성 덕분에 make_counter 함수가 실행을 마친 후에도 증가 함수는 count에 대한 액세스를 유지합니다.

클로저를 사용하는 이유는 무엇입니까?

클로저는 함수 내에 상태를 캡슐화하는 강력하고 우아한 방법을 제공합니다. 다음과 같은 시나리오에서 특히 유용합니다.

  • 값을 전역 범위에 노출하지 않고 추적하고 싶습니다.
  • 여러 호출에서 이전 상태를 기억하는 함수가 필요합니다(예: 반대 예).
  • 간단한 상태 관리를 위해 전역 변수를 사용하거나 클래스를 생성하고 싶지 않습니다.

클로저는 데코레이터, 메모, 콜백과 같은 고급 사용 사례에 사용할 수 있습니다.

위 내용은 Python의 클로저 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿