> 백엔드 개발 > 파이썬 튜토리얼 > 파이썬 데코레이터란 무엇입니까? 그것을 사용하는 방법?

파이썬 데코레이터란 무엇입니까? 그것을 사용하는 방법?

不言
풀어 주다: 2018-12-30 10:57:36
앞으로
3283명이 탐색했습니다.

이 기사에서는 Python 데코레이터가 무엇인지 소개합니다. 그것을 사용하는 방법? 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

파이썬을 배우다 보면 누구나 데코레이터에 대한 막연한 개념을 가지고 있다고 생각합니다. 저 역시 오랫동안 혼란스러워서 이를 정리하기 위해 글을 쓰기로 했습니다.

먼저 데코레이터가 무엇인지 이해해야 합니다.

간단히 말하면 데코레이터는 함수가 실행될 때 함수를 추가하지만 원래 내용에는 영향을 미치지 않습니다. 실행 후 정리 기능도 수행할 수 있습니다.

작은 예를 들어주세요

@func1
def func2():
    pass
로그인 후 복사

데코레이터가 하는 일은 func1(func2)가 함수 객체를 데코레이터에 전달한 다음 데코레이터 func1의 첫 번째 콘텐츠를 실행하는 것입니다. 그런 다음 func2 함수를 실행하세요. func1(func2) 传递了一个函数对象到我们的装饰器里面然后先执行装饰器func1其中的内容,然后再执行函数func2

比如举一个普通装饰器的例子

#普通装饰器
def func1(func):
    def add_func():
        print('这是我要添加的功能')
        return func()
    return add_func

@func1
def func2():
    print('hello world')

#func1装饰器函数
#func2被装饰的函数
>>>func2()
这是我要添加的功能
hello world
로그인 후 복사

在这段代码中func2()相当于func1(func2)()->add_func(),再想要执行func2()函数时,先执行装饰器func1()函数,并且参数func相当于func2()。执行func1函数时由于返回值是add_func,我们执行的是func1(func2)(),也就相当于执行add_func(),输出
'这是我添加的功能',返回一个func()函数,也就是参数func的调用,即对应的func2函数的调用。

装饰器的基本框架

def func1(func):
    def func2():

        return func()
    return func1()
로그인 후 복사

进阶

来一个带参数的装饰器吧

def func1(func):
    def func2(a,b):
        a=1
        b=2
        return func(a,b)
    return func()
@func1
def func(x,y)
    print('this is a add func')
    print(x+y)

>>>func(10,20)
this is a add func
3
로그인 후 복사

自这段代码中被装饰函数的参数传递到装饰函数的变量中,也就是x传递给了a,y传递给了breturn func(a,b)即调用了func函数并且函数的参数为ab

예를 들어 일반적인 데코레이터의 예를 들어보세요

def arg_func(arg):
    def _func(func):
        def _func1():
            if arg=='good':
                print('出去玩')
            if arg=='bad':
                print('不出去玩')
            return func()
        return _func1
    return _func

@arg_func('bad')
def func():
    print('bad day')
@arg_func('good')
def func1()
    print('good day')

>>>func()
不出去玩
bad day
>>>func1()
出去玩
good day
로그인 후 복사
이 코드에서 func2()는 func1(func2)()->add_func()와 동일합니다. func2() 함수를 실행하려면 다음을 실행하세요. 데코레이터의 첫 번째 func1() 함수이고 매개변수 func는 func2()와 동일합니다. func1 함수를 실행할 때 반환값이 add_func이므로 add_func()를 실행한 것과 동일한 func1(func2)()를 실행하여

'내가 추가한 함수입니다'를 출력하고 func()함수를 반환하는데, 즉, 매개변수 func의 호출은 해당 func2 함수의 호출입니다.

데코레이터의 기본 프레임워크🎜🎜rrreee🎜🎜Advanced🎜🎜🎜매개변수가 있는 데코레이터를 만들어 보겠습니다🎜rrreee🎜이 코드에서 데코레이팅된 함수의 매개변수는 데코레이팅 함수의 변수, 즉 x는 a에 전달되고, yb에 전달되고, return func(a,b) / code>즉, <code>func 함수가 호출되고 함수의 매개변수는 ab입니다. 🎜🎜매개변수를 이용한 좀 더 발전된 데코레이터 함수 (하하, 조금 헷갈리시나요?)🎜rrreee🎜이 코드는 사실 매우 간단합니다. 즉, 데코레이터에는 판단을 위한 매개변수가 하나 더 있어서 이해하기 쉬울 것 같습니다. 마찬가지로 func 데코레이터를 실행하면 함수(arg_func)의 매개변수가 나쁘고, func1 함수를 실행하면 데코레이터 수신 함수의 매개변수가 좋다🎜🎜🎜

위 내용은 파이썬 데코레이터란 무엇입니까? 그것을 사용하는 방법?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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