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
如下图所示
由此可见
函数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 중국어 웹사이트의 기타 관련 기사를 참조하세요!