>  기사  >  백엔드 개발  >  Python 기본 데코레이터 및 연습

Python 기본 데코레이터 및 연습

coldplay.xixi
coldplay.xixi앞으로
2020-12-22 17:45:002643검색

Python 동영상 튜토리얼데코레이터 설명

Python 기본 데코레이터 및 연습

무료 추천: Python 동영상 튜토리얼

Decorator 개념

Decorator, 넣어두기 ​​솔직히 말해서 장식하는 데 사용되는 기능입니다 기능.
데코레이터는 개방 및 폐쇄 원칙종속성 반전 원칙을 따릅니다. 이 두 가지 원칙과 개념은 Baidu에서 찾을 수 있습니다. 开放封闭原则依赖倒置原则,这两个原则概念,自行百度下,

装饰器长啥样

def wrapper(f): 
    def inner(*args,**kwargs):  
        ret = f(*args,**kwargs)
        return ret
    return inner

上述代码是装饰器的固定格式
调用装饰器

@wrapper  # 简称语法糖
def test():
    print(1)
test()

@wrapper是调用装饰器,相比于wrapper(test()),更节省代码,更美观。可能你看到这里就不懂了,为啥要@wrapper? 调用函数不是wrapper()
其实吧,你要我说,我也不知道,我就知道,这样写更简单。直接在要装饰的函数前@wrapper即可
以一个小例子快速看懂装饰器

def wrapper(f):
    print(2)
    def inner(*args,**kwargs):
        print(3)
        ret = f(*args,**kwargs)
        print(4)
        return ret
    return inner


@wrapper
def test():
    print(1)
test()

@wrapper == wrapper(test())   相当于调用装饰器函数,直接用语法糖@wrapper会更简便
*args是匹配以位置传参的参数,**kwargs是匹配按关键字传参的参数,这样就可以接收所有参数。
wrapper(test)接收值传给f,在内圈函数中,ret = f(*args,**kwargs)这函数是执行装饰的函数的代码。再返回执行的值,最后返回这个函数。此代码的执行结果为:

2
3
1
4

如下图所示

Python 기본 데코레이터 및 연습

由此可见
函数inner中,print(3)是执行装饰函数前的操作, print(4)

데코레이터는 어떻게 생겼나요?

'''1. 默写装饰器固定格式
  2. 写一个加减功能的装饰器
'''
위 코드는 데코레이터의 고정된 형식입니다데코레이터 호출🎜🎜rrreee🎜@wrapper는 데코레이터를 호출하는 것과 wrapper(test()), 코드를 더 아름답게 저장합니다. 이 내용을 보면 이해가 되지 않을 수도 있습니다. 왜 <code>@wrapper가 필요한가요? 호출 함수가 wrapper()가 아닌가요? 🎜사실 알려달라고 하면 이렇게 쓰는 게 더 쉽다는 걸 알 뿐이에요. 꾸미고 싶은 함수 바로 앞에 @wrapper를 붙이기만 하면 됩니다🎜🎜작은 예를 통해 데코레이터를 빠르게 이해해보세요🎜🎜rrreee🎜@wrapper == Wrapper(test ())는 데코레이터 함수를 호출하는 것과 동일합니다. 설탕 @wrapper🎜*args는 전달된 매개변수와 일치합니다. 위치에서 **kwargs는 키워드로 전달된 매개변수와 일치하는 매개변수이므로 모든 매개변수를 수신할 수 있다. 🎜wrapper(test)는 값을 받아 f에 전달합니다. 내부 원 함수에서는 ret = f(*args,**kwargs) code> this 함수는 장식된 함수를 실행하는 코드입니다. 그런 다음 실행된 값을 반환하고 마지막으로 이 함수를 반환합니다. 이 코드의 실행 결과는 🎜rrreee🎜🎜아래와 같습니다🎜🎜<p class="image-package"><img src="https://img.php.cn/upload/image/723/107/%20577/1608630143622300.png" title="1608630143622300.png" alt="Python 기본 데코레이터 및 연습">🎜🎜🎜함수 <code>inner, print(3 ) 는 데코레이팅된 함수를 실행하기 전의 작업이고, <code>print(4) 는 데코레이팅된 함수를 실행한 후의 작업입니다. 🎜이해하기 어려울 수도 있습니다. 그러니 시도해 보는 것이 가장 좋습니다. 🎜🎜🎜기본 연습🎜🎜rrreee

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

성명:
이 기사는 jianshu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제