Python의 클로저 사용 예
이 글은 주로 Python 기본 튜토리얼에서 클로저 사용 방법에 대한 정보를 소개합니다. 도움이 필요한 친구들은
Python 기본 튜토리얼의 클로저 사용 방법
을 참조하세요. 머리말:
클로저는 함수형 프로그래밍에서 중요한 문법 구조입니다. 함수형 프로그래밍은 프로그래밍 패러다임입니다. 절차적 프로그래밍과 객체 지향 프로그래밍도 프로그래밍 패러다임입니다. 프로세스 지향 프로그래밍에서는 함수를 보았고, 객체 지향 프로그래밍에서는 객체를 보았습니다. 함수와 객체의 기본 목적은 코드를 특정 논리적 방식으로 구성하고 코드의 재사용성을 향상시키는 것입니다. 클로저는 코드를 정리하는 구조이기도 하며 코드의 재사용성을 향상시킵니다.
다양한 언어는 다양한 방식으로 클로저를 구현합니다. Python은 함수 개체를 기반으로 하며 클로저의 구문 구조에 대한 지원을 제공합니다(우리는 Python이 개체를 사용하여 특수 메서드 및 다중 패러다임에서 일부 특수 구문을 구현하는 것을 여러 번 보았습니다). 파이썬에서는 모든 것이 객체이고, 함수의 문법적 구조도 객체입니다. 함수 객체에서는 함수 객체의 이름을 바꾸거나 함수 객체를 매개변수로 전달하는 등 일반 객체처럼 함수 객체를 사용합니다.
함수 개체의 범위
다른 개체와 마찬가지로 함수 개체에도 고유한 생존 범위가 있는데, 이것이 함수 개체의 범위입니다. 함수 객체는 def 문을 사용하여 정의되며, 함수 객체의 범위는 def가 위치한 수준과 동일합니다. 예를 들어, 다음 코드에서 line_conf 함수의 소속 범위 내에서 정의한 함수 라인은 line_conf의 소속 범위 내에서만 호출될 수 있습니다.
def line_conf(): def line(x): return 2*x+1 print(line(5)) # within the scope line_conf() print(line(5)) # out of the scope
line 함수는 직선(y = 2x + 1)을 정의합니다. 보시다시피 line_conf()에서 line 함수를 호출할 수 있지만 범위 외부에서 line을 호출하면 다음 오류가 발생합니다.
NameError: name 'line' is not defined
이는 이미 범위 외부에 있음을 나타냅니다.
마찬가지로 람다를 사용하여 함수를 정의하는 경우 함수 개체의 범위는 람다가 위치한 수준과 동일합니다.
Closure
함수는 객체이므로 특정 함수의 반환 결과로 사용될 수 있습니다.
def line_conf(): def line(x): return 2*x+1 return line # return a function object my_line = line_conf() print(my_line(5))
위 코드는 성공적으로 실행될 수 있습니다. line_conf의 반환 결과는 line 개체에 할당됩니다. 위의 코드는 11을 인쇄합니다.
line() 정의에서 외부 변수를 참조하면 어떻게 되나요?
def line_conf(): b = 15 def line(x): return 2*x+b return line # return a function object b = 5 my_line = line_conf() print(my_line(5))
line으로 정의된 하위 프로그램 블록에서는 상위 변수 b가 참조되지만, b 정보는 line의 정의 외부에 존재하는 것을 알 수 있습니다(b의 정의는 line의 하위 프로그램 블록에 없습니다). 선). b를 line의 환경 변수라고 부릅니다. 실제로 line이 line_conf의 반환 값으로 사용되면 line에는 이미 b 값이 포함되어 있습니다(b는 line과 관련이 없지만).
위 코드는 25를 출력합니다. 즉, 라인에서 참조하는 b 값은 함수 객체 정의 시 참조할 수 있는 b 값입니다. 사용할 때의 b 값은 아닙니다.
함수와 해당 환경 변수가 함께클로저를 형성합니다. 파이썬에서 소위 클로저(closure)는 환경 변수의 값을 포함하는 함수 객체입니다. 환경 변수 값은 함수 객체의 __closure__ 속성에 저장됩니다. 예를 들어, 다음 코드:
def line_conf(): b = 15 def line(x): return 2*x+b return line # return a function object b = 5 my_line = line_conf() print(my_line.__closure__) print(my_line.__closure__[0].cell_contents)
def line_conf(a, b): def line(x): return ax + b return line line1 = line_conf(1, 1) line2 = line_conf(4, 5) print(line1(5), line2(5))
클로저 및 병렬 작업
병렬 컴퓨팅이 핫스팟이 되고 있습니다. 이는 함수형 프로그래밍이 다시 대중화되는 중요한 이유이기도 합니다. 함수형 프로그래밍은 1950년대부터 존재했지만 널리 사용되지는 않았습니다. 그러나 위에서 설명한 파이프라인 작업 병렬 클러스터링 프로세스는 함수형 프로그래밍에 완벽하게 적합합니다. 함수형 프로그래밍의 자연스러운 장점으로 인해 점점 더 많은 언어에서 함수형 프로그래밍 패러다임에 대한 지원을 추가하기 시작했습니다.
위 내용은 Python의 클로저 사용 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

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

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

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

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

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

뜨거운 주제











많은 웹 사이트 개발자는 램프 아키텍처에서 Node.js 또는 Python 서비스를 통합하는 문제에 직면 해 있습니다. 기존 램프 (Linux Apache MySQL PHP) 아키텍처 웹 사이트 요구 사항 ...

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

SCAPY 크롤러를 사용할 때 파이프 라인 영구 스토리지 파일을 작성할 수없는 이유는 무엇입니까? 토론 Data Crawler에 Scapy Crawler를 사용하는 법을 배울 때 종종 ...

Python Process Pool은 클라이언트가 갇히게하는 동시 TCP 요청을 처리합니다. 네트워크 프로그래밍에 Python을 사용하는 경우 동시 TCP 요청을 효율적으로 처리하는 것이 중요합니다. ...

functools.partial in Python의 파이썬 funcTools.partial 객체의 시청 방법을 깊이 탐구하십시오 ...

Python 크로스 플랫폼 데스크톱 응용 프로그램 개발 라이브러리 선택 많은 Python 개발자가 Windows 및 Linux 시스템 모두에서 실행할 수있는 데스크탑 응용 프로그램을 개발하고자합니다 ...

Python : 모래 시계 그래픽 도면 및 입력 검증을 시작 하기이 기사는 모래 시계 그래픽 드로잉 프로그램에서 Python 초보자가 발생하는 변수 정의 문제를 해결합니다. 암호...

많은 개발자들이 PYPI (PythonPackageIndex)에 의존합니다 ...
