Python에서 중첩 함수와 클로저의 차이점은 무엇입니까?

DDD
풀어 주다: 2024-11-23 02:32:10
원래의
963명이 탐색했습니다.

What's the Difference Between Nested Functions and Closures in Python?

Python의 중첩 함수와 클로저

Python의 중첩 함수는 표면적으로 클로저와 유사하지만 다음과 같은 주요 차이점으로 인해 근본적으로 구별됩니다.

중첩 함수 비클로저

Python의 중첩 함수는 다음 요구 사항을 충족하지 않기 때문에 클로저로 간주되지 않습니다.

  • 다음과 같은 경우 포함 범위에 로컬인 변수에 액세스하지 않습니다. 포함된 범위 밖에서 실행됩니다.

다음을 고려하세요. 예:

def make_printer(msg):
    def printer():
        print(msg)
    return printer
로그인 후 복사

여기서 프린터 함수는 make_printer 내에 중첩된 함수입니다. make_printer가 반환된 후 지역 변수 msg를 참조하기 때문에 클로저입니다.

클로저 정의

클로저는 둘러싸는 범위에 대한 참조를 유지하는 함수입니다. 자체 범위 내에서 정의되지 않은 변수에 액세스할 수 있습니다. 이 참조는 포함된 범위가 종료된 후에도 유지됩니다.

비 클로저 중첩 함수

한편, 다음 중첩 함수는 기본값을 사용합니다. 매개변수 값은 클로저가 아닙니다:

def make_printer(msg):
    def printer(msg=msg):
        print(msg)
    return printer
로그인 후 복사

이 경우 msg 변수는 기본값에 바인딩됩니다. 프린터가 생성될 때 값을 지정하며 자체 범위 밖의 변수를 참조하지 않습니다. 따라서 클로저가 아닙니다.

결론

파이썬에서 클로저 정의를 충족하지 않는 중첩 함수를 구별하기 위해 흔히 "중첩 함수"라고 부릅니다. 진짜 폐쇄에서. 클로저는 포함 범위의 상태를 유지하는 데 유용할 수 있는 반면, 비클로저 중첩 함수는 단순히 어휘 범위 내에서 기능을 캡슐화합니다.

위 내용은 Python에서 중첩 함수와 클로저의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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