Python 데코레이터에 대한 자세한 소개

王林
풀어 주다: 2020-07-08 13:40:09
원래의
2782명이 탐색했습니다.

Python 데코레이터는 원래 함수 이름(또는 클래스 이름)을 변경하지 않고 함수에 새로운 함수를 추가하는 것이 목적입니다. 데코레이터는 본질적으로 클로저이고 클로저는 데코레이터의 핵심입니다.

Python 데코레이터에 대한 자세한 소개

Definition

(권장 튜토리얼: python tutorial)

Python 데코레이터(fuctional 데코레이터)는 원래 함수 이름을 변경하지 않을 목적으로(또는 클래스) 이름), 함수에 새로운 기능을 추가합니다.

이 함수의 특별한 점은 반환 값도 함수라는 것입니다. 이 함수는 "원래" 함수가 포함된 함수입니다.

자세한 설명

데코레이터는 실제로 함수를 반환하는 클로저입니다. 매개변수로 함수의 대체 버전인 클로저는 데코레이터의 핵심입니다.

클로저의 특징을 간략하게 설명하세요.

함수 개체가 실행될 때 변수 값에 따라 달라집니다. 이때 함수는 함수 개체의 실제 내용을 반환합니다.

예:

#encoding=utf-8
import time
def now():
    print "current time is %s" %time.strftime("%Y-%m-%d %H-%M-%S")
res=now
res()
로그인 후 복사

결과:

이제 now에 다른 함수를 추가하고 싶습니다. () 함수는 함수 호출 전후에 일부 로그를 자동으로 인쇄하지만 now()의 원래 정의를 수정하고 싶지 않으므로 데코레이터가 유용합니다.

본질적으로 데코레이터는 더 높은 수준입니다. 함수를 반환하는 order 함수이므로 로그를 출력할 수 있는 데코레이터를 정의해야 합니다.

Python2.4 이후에는 @ 식별자를 사용하여 함수에 데코레이터를 적용하는 것이 지원됩니다. Python 데코레이터에 대한 자세한 소개

코드:

#encoding=utf-8
import time
#定义装饰器
def log(func):
    def wrapper(*args,**kw):
        print "call func is %s" %func.__name__
        return func(*args,**kw)
    return wrapper

@log
def now():
    now = time.strftime("%Y-%m-%d %H-%M-%S")
    print "current time is %s" %now

now()
로그인 후 복사
결과:

위 내용은 Python 데코레이터에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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