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

歡迎訪問 生活随笔!

生活随笔

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

python

Python小白学习之函数装饰器

發布時間:2025/3/21 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python小白学习之函数装饰器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

裝飾器

2018-10-25 13:49:37


裝飾器從字面意思就是用來裝飾的,在函數可以理解為:在函數中,我們不想影響原來的函數功能,又想給函數添加新的功能,這時候我們就用到了裝飾器。

一般函數操作(不用裝飾器):

1 import time 2 print(time.time()) 3 def i_can_sleep(): 4 time.sleep(3) 5 start = time.time() 6 i_can_sleep() 7 stop = time.time() 8 print("函數運行了%s"%(stop - start))

?

執行結果:

?

使用裝飾器:

下面程序分為4步走(外部函數、返回嵌套函數、嵌套函數+語法糖(@裝飾函數簡寫)+被裝飾函數+調用被裝飾的函數);若有大量的調用函數i_can_sleep并查看程序運行了多長時間,我們就嘚不厭其煩的定義新的start和stop變量,然后打印時間 為此,我們就需要更簡單的方法,裝飾器,把這些重復的工作封裝到裝飾函數中也就是封裝到@裝飾函數名(語法糖) 代碼如下:
1 ################################### 2 import time 3 def timer(fun):#參數是我們要傳入的被裝飾函數,記下面的i_can_sleep函數 #1 4 #此處我們需要在函數內部再定義一個內部函數,即嵌套函數 5 def decorator(): 6 start = time.time() 7 fun() #調用被裝飾的函數,下面的i_can_sleep() 8 stop = time.time() 9 print('被裝飾的函數i_can_sleep程序執行時間為:',stop-start) #給被裝飾函數添加計時器功能 10 return decorator 11 @timer #裝飾函數 # 2 12 def i_can_sleep():#我們要裝飾的函數,即被裝飾函數 # 3 13 time.sleep(3) 14 i_can_sleep() #最后一步調用程序 # 4 15 # 其實上面的第四部也可以按下面寫,只是裝飾器簡化下面的步驟。 16 #next = timer(i_can_sleep);next()

執行結果如下:

可以看到執行結果和不使用裝飾器一樣的。看上去使用裝飾器復雜了,實際上,對于大量執行計時器操作,就不用重復定義變量并打印結果了,我們使用裝飾器只需改變少量實參即可即可省去重復操作,因為我們把一部分重復操作封裝在裝飾函數中,@裝飾函數名。

帶參數的被裝飾函數

上面是不帶參數的裝飾器,下面是帶參數的裝飾器,注意:1、參數放在內部函數中#1;2、被裝飾的函數也要加上參數 看#2;定義被裝飾的函數有參數看#3、#4。3、定義被裝飾函數時(語法糖下面的函數是被裝飾函數),形參名字和上面的嵌套函數可以不一致。
1 print("---------------------------------------------------") 2 # 帶參數的裝飾器 3 def wai(func): 4 def nei(a,b): #參數放在內部函數中 #1 5 print('start') 6 func(a,b) #被裝飾函數調用也要加上參數 #2 7 print('stop') 8 return nei 9 @wai 10 def add(m,n): #加法 #3 11 return print(m+n) #參數名和嵌套函數中的參數名字可以不同。 12 add(4,5) 13 # 可以多次使用語法糖調用裝飾器 14 @wai 15 def sub(x,y): #減法 #4 16 return print(x-y) 17 sub(11,4)

執行結果如下:

?

帶參數的裝飾器(帶參數的語法糖)

不改變內部被裝飾函數,通過在語法糖(@裝飾函數名)后面添加實參和并且在裝飾函數再加一層外層函數

1 def add_chars(argv): 2 def wai(func): 3 def nei(a,b): 4 print('開始:%s'%argv) 5 func(a,b) 6 print('結束') 7 return nei 8 return wai 9 @add_chars('加法') #語法糖名字要和多層嵌套函數最外層函數名一致,并且參數對應最外層函數形參 10 def add(m,n): 11 return print(m,'+',n,'=',m+n) 12 add(4,6) 13 @add_chars('減法') # 14 def sub(x,y): #減法 15 return print(x,'-',y,'=',x-y) 16 sub(11,4) 17 # 裝飾器帶參數;在語法糖上帶參數 18 # 可以看到一層嵌套函數,出入的參數滿了,我們可以在最外面加一層嵌套函數

執行結果如下:




小白學習筆記,如有理解錯誤,望批評指正,大佬止步。

轉載于:https://www.cnblogs.com/chxb/p/9849348.html

總結

以上是生活随笔為你收集整理的Python小白学习之函数装饰器的全部內容,希望文章能夠幫你解決所遇到的問題。

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