Python 클로저에 대한 자세한 소개
컴퓨터 과학에서 클로저(Closure)는 렉시컬 클로저(Lexical Closure)의 약자로 자유변수를 참조하는 함수이다. 참조된 자유 변수는 그것이 생성된 환경을 떠난 후에도 함수에 남아 있습니다. 따라서 클로저는 함수와 관련 참조 환경으로 구성된 엔터티라고 말하는 또 다른 방법이 있습니다. 클로저는 런타임에 여러 인스턴스를 가질 수 있으며, 서로 다른 참조 환경과 동일한 함수 조합이 서로 다른 인스턴스를 생성할 수 있습니다.
저는 클로저를 코드 구성을 위한 구조로 보는 후자를 선호합니다. 이유는 나중에 설명하겠습니다.
클로저 코드의 구조는 어떻게 되나요?
Python에서는 모든 것이 객체이며 물론 함수도 포함됩니다. 함수 개체는 변수에 할당될 수 있으며, 이 변수를 통해 함수를 호출할 수 있습니다. 함수 개체는 매개 변수로 전달될 수도 있고 함수의 반환 결과로 사용될 수도 있습니다. 또한 Python에서는 함수를 중첩할 수 있습니다.
Python은 함수 객체를 기반으로 하며 클로저의 문법적 구조를 지원합니다
먼저 예제를 살펴보겠습니다
def f1(): name1 = 'Alice' name2 = 'Bob' def f2(): print('hello,%s,%s' %(name1,name2)) return f2 if __name__ == '__main__': name1 = 'David' name2 = 'Frank' func = f1() func() print(func.__closure__) print(func.__closure__[0].cell_contents) print(func.__closure__[1].cell_contents)# 输出hello,Alice,Bob (<cell at 0x03A55CF0: str object at 0x03CBEA20>, <cell at 0x03CBEAD0: str object at 0x03CBEAA0>) Alice Bob
함수 f2는 함수 f1 내부에 정의되어 있으며 f1에 정의된 변수 name1 및 name2가 제거됩니다.
f1은 함수 개체 f2를 반환하지만 실제로 반환된 f2에는 f1의 변수 name1 및 name2가 이미 포함되어 있으며 이는 코드 실행 결과에서 볼 수 있습니다.
메인 프로그램에서 name1과 name2를 재정의하더라도 func 함수가 실행될 때의 변수 값은 정의될 때 여전히 호출됩니다. 즉, 참조 환경 변수가 호출될 때의 변수 값이 아닙니다. 사용된.
요약하자면 Python에서 클로저는 함수와 참조되는 환경 변수를 포함하는 코드 블록입니다. 저는 클로저를 함수라기보다는 코드 구조로 생각하는 경향이 있습니다. 클로저의 참조 환경과 내부 함수를 함께 래핑하고 내부 함수를 실행하지 않고 함수 객체로 반환합니다. 이 함수 객체가 호출되면 내부 함수 함수가 실행됩니다.
참조된 환경 변수의 값은 함수 객체의 클로저 속성에 저장됩니다. 클로저에는 튜플이 포함되어 있습니다. 이 튜플의 각 요소는 셀 유형의 객체입니다. 첫 번째 셀에는 클로저를 생성할 때 환경 변수 name1의 값인 Alice가 포함되어 있는 것을 볼 수 있습니다. 이는 위 코드의 결과를 보면 알 수 있습니다.
이제 백과사전에서 클로저에 대한 설명을 다시 살펴보세요.
이제 또 다른 예를 들어보겠습니다.
# 此例子转自伯乐在线def line_def(a, b): def line(x): return a * x + b return lineif __name__ == '__main__': func = line_def(2, 3) print(func(5))# 输出13
이 예에서는 함수 라인과 환경 변수 a, b가 클로저를 형성합니다. a의 값만 변경하면 됩니다. , b를 얻으려면 다양한 직선 함수가 캡슐화를 개선하므로 매개변수 a와 b에만 주의하면 되고 내부 직선의 구현에는 신경 쓰지 않아도 됩니다.
클로저의 가장 큰 특징은 외부 함수의 변수를 내부 함수에 바인딩하고, 이때 변수(즉, 클로저)를 바인딩한 후 함수를 반환할 수 있다는 점입니다. 클로저가 생성된(외부 함수)이 해제되었더라도 클로저는 여전히 존재합니다.
클로저의 주요 응용 분야는 데코레이터이지만 기능을 전달합니다. 이건 다음에 쓰겠습니다.
위 내용은 Python 클로저에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Linux 터미널에서 Python 버전을 보려고 할 때 Linux 터미널에서 Python 버전을 볼 때 권한 문제에 대한 솔루션 ... Python을 입력하십시오 ...

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Python의 Pandas 라이브러리를 사용할 때는 구조가 다른 두 데이터 프레임 사이에서 전체 열을 복사하는 방법이 일반적인 문제입니다. 두 개의 dats가 있다고 가정 해

Uvicorn은 HTTP 요청을 어떻게 지속적으로 듣습니까? Uvicorn은 ASGI를 기반으로 한 가벼운 웹 서버입니다. 핵심 기능 중 하나는 HTTP 요청을 듣고 진행하는 것입니다 ...

Linux 터미널에서 Python 사용 ...

파이썬에서 문자열을 통해 객체를 동적으로 생성하고 메소드를 호출하는 방법은 무엇입니까? 특히 구성 또는 실행 해야하는 경우 일반적인 프로그래밍 요구 사항입니다.
