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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

对python装饰器几种常见方式的使用与理解

發布時間:2025/3/20 python 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对python装饰器几种常见方式的使用与理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、裝飾器的理論:

(1)裝飾器實際上就是一個函數

(2)有2個特別之處,參數是一個函數。返回值是一個參數

2、裝飾器的簡單理解:

實際上就是為了給一個程序添加功能,但是該程序已經上線或者已被使用,那么就不能大批量的修改源碼,這樣不現實,因此就產生了裝飾器。

注意點:

(1)不能修改被裝飾的函數的源代碼

(2)不能修改被裝飾的函數的調用方式

3、裝飾器的組成方式:

函數+實參高階函數+返回值高階函數+嵌套函數+語法糖 = 裝飾器

有關高階函數的理解:

(1)把一個函數名當作實參傳給另外一個函數(”實參高階函數“)(2)返回值中包含函數名(”返回值高階函數“)

嵌套函數的理解:

嵌套函數指的是在函數內部定義一個函數,而不是調用。

語法糖:

寫法:@xx ,一般寫在函數的上方

4、真正裝飾器的開始之處:

裝飾器在裝飾時,需要在每個函數前面加上@xxx

(1) 裝飾無參函數,示例代碼如下:

#裝飾器裝飾的函數無參數 def timer(func): #func其實指的就是testdef deco():start = time.time()func() #這里其實是對test的調用stop = time.time()print (stop-start)return deco@timer #test函數使用裝飾器 def test():time.sleep(2)print ("test is running") test()打印結果: test is running 2.003510952

(2)裝飾有參函數,示例代碼如下:

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' #裝飾器裝飾的函數有參數 def timer(func):def deco(*args,**kwargs): #添加可變參數*args和**kwargsstart = time.time()func(*args,**kwargs) #這里也是一樣,添加可變參數*args和**kwargsstop = time.time()print (stop-start)return deco@timer def test(value): #test函數有個參數value,正因為裝飾器timer裝飾的函數test有參數value,因此在timer中的有了可變參數time.sleep(2)print ("test is running %s" %value) test("22")打印結果: test is running 22 2.00424408913

(3)帶參數的裝飾器,示例代碼如下:

#裝飾器帶參數 def timer(parameter):def out_wapper(func):def wapper(*wargs,**kwargs):if parameter == "task1":start = time.time()func(*wargs,**kwargs)stop = time.time()print ("the task1 is run:",stop-start)elif parameter == "task2":func(*wargs, **kwargs)print ("the task2 is run:")return wapperreturn out_wapper@timer(parameter = "task1") def task1():time.sleep(2)print "in the task1"@timer(parameter = "task2") def task2():time.sleep(2)print "in the task2"task1() task2()打印結果: in the task1('the task1 is run:', 2.002906084060669)in the task2the task2 is run:

總結

以上是生活随笔為你收集整理的对python装饰器几种常见方式的使用与理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。