python学习-装饰器(可变参装饰器、完善装饰器)
生活随笔
收集整理的這篇文章主要介紹了
python学习-装饰器(可变参装饰器、完善装饰器)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 可變參裝飾器
- 完善裝飾器
可變參裝飾器
*args表示任何多個無名參數,它是一個tuple;**kwargs表示關鍵字參數,它是一個dict。 并且同時使用*args和**kwargs時,必須*args參數列要在**kwargs前。下列代碼中用到的一些知識點,如:
import functools
@functools.wraps(a_func)等,在本文后續會有說明。
這部分代碼主要是為了介紹裝飾器可變參的情形。適配多種情況。
運行結果:
完善裝飾器
上一篇博文里面講到了裝飾器,由于時間原因,我自己理解得并不透徹。
所以今天對于這部分內容進行了深入了解。
寫注釋的好處在于,我們調用 print(a_func.doc) 即可打印出函數注釋,這樣就能知道調用到那個函數,并且函數注釋的內容都清楚了。也方便我們理解裝飾器,因為引入了裝飾器,通過打印__name__和__doc__,我們就能很清楚的知道調用了哪個函數。
在python里面,可以通過引入內置模塊,快速的賦值函數的屬性。
我這里用一些代碼來演示:
以上代碼中,我添加了注釋,用于區分調用的函數。
查看運行結果:
這里打印的是裝飾器里面定義的函數(wrapTheFunction)的信息。如果我們想要知道傳入的函數的一些屬性信息,需要引入內置模塊 functools。
引入的兩種方式:
對應的使用方式:
def a_new_decorator(a_func):@functools.wraps(a_func)@wraps(a_func)def wrapTheFunction(*args, **kwargs):"""a_new_decorator:param a_func::return: wrapTheFunction"""print(a_func.__name__)print("I am doing some boring work before executing a_func()")a_func(*args, **kwargs)print("I am doing some boring work after executing a_func()")return wrapTheFunction@functools.wraps(a_func)和@wraps(a_func)是相同的,引入一個即可。
運行結果:
在a_new_decorator函數中打印的就是我們傳入的方法的屬性了。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python学习-装饰器(可变参装饰器、完善装饰器)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6s啥时候上市的
- 下一篇: 最强文件分类整理方法(有哪些值得借鉴的工