python学习-装饰器(可变参装饰器、完善装饰器)
文章目錄
- 可變參裝飾器
- 完善裝飾器
可變參裝飾器
*args表示任何多個(gè)無(wú)名參數(shù),它是一個(gè)tuple;**kwargs表示關(guān)鍵字參數(shù),它是一個(gè)dict。 并且同時(shí)使用*args和**kwargs時(shí),必須*args參數(shù)列要在**kwargs前。下列代碼中用到的一些知識(shí)點(diǎn),如:
import functools
@functools.wraps(a_func)等,在本文后續(xù)會(huì)有說(shuō)明。
這部分代碼主要是為了介紹裝飾器可變參的情形。適配多種情況。
運(yùn)行結(jié)果:
完善裝飾器
上一篇博文里面講到了裝飾器,由于時(shí)間原因,我自己理解得并不透徹。
所以今天對(duì)于這部分內(nèi)容進(jìn)行了深入了解。
寫注釋的好處在于,我們調(diào)用 print(a_func.doc) 即可打印出函數(shù)注釋,這樣就能知道調(diào)用到那個(gè)函數(shù),并且函數(shù)注釋的內(nèi)容都清楚了。也方便我們理解裝飾器,因?yàn)橐肓搜b飾器,通過打印__name__和__doc__,我們就能很清楚的知道調(diào)用了哪個(gè)函數(shù)。
在python里面,可以通過引入內(nèi)置模塊,快速的賦值函數(shù)的屬性。
我這里用一些代碼來(lái)演示:
以上代碼中,我添加了注釋,用于區(qū)分調(diào)用的函數(shù)。
查看運(yùn)行結(jié)果:
這里打印的是裝飾器里面定義的函數(shù)(wrapTheFunction)的信息。如果我們想要知道傳入的函數(shù)的一些屬性信息,需要引入內(nèi)置模塊 functools。
引入的兩種方式:
對(duì)應(yīng)的使用方式:
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)是相同的,引入一個(gè)即可。
運(yùn)行結(jié)果:
在a_new_decorator函數(shù)中打印的就是我們傳入的方法的屬性了。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的python学习-装饰器(可变参装饰器、完善装饰器)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6s啥时候上市的
- 下一篇: python学习-异常(异常类型,异常处