日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python学习-装饰器(可变参装饰器、完善装饰器)

發(fā)布時(shí)間:2023/12/19 python 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python学习-装饰器(可变参装饰器、完善装饰器) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 可變參裝飾器
  • 完善裝飾器

可變參裝飾器

*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ō)明。

import functoolsdef a_new_decorator(a_func):@functools.wraps(a_func)def wrapTheFunction(*args, **kwargs):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@a_new_decorator def a_function_requiring_decoration3(a1, a2, a3):print("a1 = {}\na2 = {}\na3 = {}".format(a1, a2, a3))@a_new_decorator def a_function_requiring_decoration2(a1, a2):print("a1 = {}\na2 = {}".format(a1, a2))@a_new_decorator def a_function_requiring_decoration1(a1):print("a1 = {}".format(a1))a_function_requiring_decoration1('123') a_function_requiring_decoration2('123', '456') a_function_requiring_decoration3('123', '456', '789')

這部分代碼主要是為了介紹裝飾器可變參的情形。適配多種情況。
運(yùn)行結(jié)果:

完善裝飾器

上一篇博文里面講到了裝飾器,由于時(shí)間原因,我自己理解得并不透徹。
所以今天對(duì)于這部分內(nèi)容進(jìn)行了深入了解。

函數(shù)注釋 """回車""" 在PyCharm中輸入三個(gè)雙引號(hào)"""然后回車,注釋就出來(lái)了類似這樣:"""a_new_decorator:param a_func::return: wrapTheFunction"""

寫注釋的好處在于,我們調(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)演示:

def a_new_decorator(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@a_new_decorator def a_function_requiring_decoration():"""a_function_requiring_decoration:return: None"""print("I am the function which needs some decoration to ""remove my foul smell")print("__name__ = ", a_function_requiring_decoration.__name__) print("__doc__ = ", a_function_requiring_decoration.__doc__)

以上代碼中,我添加了注釋,用于區(qū)分調(diào)用的函數(shù)。
查看運(yùn)行結(jié)果:

這里打印的是裝飾器里面定義的函數(shù)(wrapTheFunction)的信息。如果我們想要知道傳入的函數(shù)的一些屬性信息,需要引入內(nèi)置模塊 functools。
引入的兩種方式:

from functools import wraps import 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。