>  기사  >  백엔드 개발  >  파이썬 데코레이터는 무엇으로 시작하나요?

파이썬 데코레이터는 무엇으로 시작하나요?

(*-*)浩
(*-*)浩원래의
2019-07-20 13:30:523198검색

데코레이터는 Python의 중요한 부분입니다. 간단히 말하면 다른 기능의 기능을 수정하는 기능입니다. 코드를 더 짧고 더 파이썬적으로 만드는 데 도움이 됩니다.

파이썬 데코레이터는 무엇으로 시작하나요?

파이썬의 데코레이터를 이해하려면 먼저 클로저의 개념을 이해해야 합니다. (추천 학습: Python 동영상 튜토리얼)

컴퓨터 과학에서 클로저(영어: Closure)는 어휘 클로저(Lexical Closure) 또는 함수 클로저(function closures)라고도 알려져 있으며 자유 변수 함수를 의미합니다. 참조된 자유 변수는 그것이 생성된 환경을 떠난 후에도 함수에 남아 있습니다.

Decorator

일반적인 데코레이터는 일반적으로 다음과 같습니다.

import functools

def log(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print('call %s():' % func.__name__)
        print('args = {}'.format(*args))
        return func(*args, **kwargs)

    return wrapper

이것은 메소드 이름과 해당 매개변수를 인쇄하는 데코레이터를 정의합니다.

호출하려면 처음에 @를 사용하세요:

@logdef test(p):
    print(test.__name__ + " param: " + p)
    
test("I'm a param")

출력:

call test():
args = I'm a param
test param: I'm a param

데코레이터를 사용할 때 @ 구문이 사용되는데 조금 헷갈립니다. 사실 데코레이터는 단지 메소드일 뿐이며 다음 호출 메소드와 다르지 않습니다.

def test(p):    print(test.__name__ + " param: " + p)

wrapper = log(test)
wrapper("I'm a param")

@구문은 단지 함수를 데코레이터 함수에 전달하는 것일 뿐, 마법 같은 것은 없습니다.

파이썬에서 제공하는 데코레이터인 @functools.wraps(func)를 주목할 가치가 있습니다. 원래 함수의 메타 정보를 데코레이터의 func 함수에 복사할 수 있습니다. 함수의 메타정보에는 독스트링, 이름, 매개변수 목록 등이 포함됩니다.

@functools.wraps(func)를 제거하려고 하면 test.__name__의 출력이 래퍼가 되는 것을 확인할 수 있습니다.

더 많은 Python 관련 기술 기사를 보려면 Python Tutorial 칼럼을 방문하여 알아보세요!

위 내용은 파이썬 데코레이터는 무엇으로 시작하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.