上一篇文章:Python是動態語言:動態添加或刪除屬性、方法
下一篇文章:私有化規則與屬性Property
1、無參數函數的裝飾器裝飾器功能:
引入日志
函數執行時間統計
執行函數前預備處理
執行函數后清理功能
權限校驗
緩存
實例:
from time import ctime,sleep def time_fun(func): #內部包裹函數 def wrapped_fun(): #ctime():打印當前時間 print("%s 在 %s 時被調用"%(func.__name__,ctime())) #執行函數執行 func() #把內部嵌套函數作為對象返回 return wrapped_fun @time_fun def test(): print("test 執行了") test() #休眠3秒 sleep(3) test()
結果:
test 在 Wed Aug 15 22:19:51 2018 時被調用 test 執行了 test 在 Wed Aug 15 22:19:53 2018 時被調用 test 執行了2、有參數函數的裝飾器
實例:
from time import ctime,sleep def time_fun(func): #內部包裹函數 def wrapped_fun(a,b): #ctime():打印當前時間 print("%s 在 %s 時被調用"%(func.__name__,ctime())) #執行函數執行 func(a,b) #把內部嵌套函數作為對象返回 return wrapped_fun @time_fun def test(a,b): print(a+b) test(1,2) #休眠3秒 sleep(3) test(3,4)
結果:
test 在 Wed Aug 15 22:23:07 2018 時被調用 3 test 在 Wed Aug 15 22:23:10 2018 時被調用 73、不定長函數的裝飾器
實例:
from time import ctime,sleep def time_fun(func): #內部包裹函數 def wrapped_fun(*args,**kwargs): #ctime():打印當前時間 print("%s 在 %s 時被調用"%(func.__name__,ctime())) #執行函數執行 func(*args,**kwargs) #把內部嵌套函數作為對象返回 return wrapped_fun @time_fun def test(a,b,c): print(a+b+c) test(1,2,3) #休眠3秒 sleep(3) test(3,4,5)
結果:
test 在 Wed Aug 15 22:26:36 2018 時被調用 6 test 在 Wed Aug 15 22:26:39 2018 時被調用 124、帶返回值函數的裝飾器
實例:
from time import ctime,sleep def time_fun(func): #內部包裹函數 def wrapped_fun(*args,**kwargs): #ctime():打印當前時間 print("%s 在 %s 時被調用"%(func.__name__,ctime())) #執行函數執行 return func(*args,**kwargs) #把內部嵌套函數作為對象返回 return wrapped_fun @time_fun def test(a,b,c): print("test--",a+b+c) @time_fun def test2(a,b,c): return a+b+c test(1,2,3) print(test2(1,2,3)) #休眠3秒 sleep(3) test(1,2,3) print(test2(3,4,5))
結果:
test 在 Wed Aug 15 22:31:14 2018 時被調用 test-- 6 test2 在 Wed Aug 15 22:31:14 2018 時被調用 6 test 在 Wed Aug 15 22:31:17 2018 時被調用 test-- 6 test2 在 Wed Aug 15 22:31:17 2018 時被調用 125、裝飾器帶有參數
實例:
from time import ctime,sleep def time_fun_pre(pre="hello"): def time_fun(func): # 內部包裹函數 def wrapped_fun(*args, **kwargs): # ctime():打印當前時間 print("%s 在 %s 時被調用,pre參數為:%s" % (func.__name__, ctime(),pre)) # 執行函數執行 return func(*args, **kwargs) # 把內部嵌套函數作為對象返回 return wrapped_fun return time_fun @time_fun_pre("mark_test") def test(a,b,c): print("test--",a+b+c) @time_fun_pre("mark_test2") def test2(a,b,c): return a+b+c test(1,2,3) print(test2(1,2,3)) #休眠3秒 sleep(3) test(1,2,3) print(test2(3,4,5))
結果:
test 在 Wed Aug 15 22:43:27 2018 時被調用,pre參數為:mark_test test-- 6 test2 在 Wed Aug 15 22:43:27 2018 時被調用,pre參數為:mark_test2 6 test 在 Wed Aug 15 22:43:30 2018 時被調用,pre參數為:mark_test test-- 6 test2 在 Wed Aug 15 22:43:30 2018 時被調用,pre參數為:mark_test2 126、類裝飾器
python類裝飾性必須要接受一個callable對象作為參數,然后返回一個callable對象,在python中,一般callable對象都是函數,只要對象重寫了__call__()方法,那么這個對象就是callable對象。
實例:
class Test(): def __init__(self,func): print("test初始化:",func.__name__) self.func=func def __call__(self, *args, **kwargs): print("我調用了") self.func @Test def test(): print("--test--") test()
結果:
test初始化: test 我調用了
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42245.html
摘要:以下這些項目,你拿來學習學習練練手。當你每個步驟都能做到很優秀的時候,你應該考慮如何組合這四個步驟,使你的爬蟲達到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學習不是一朝一夕的事情,建議多看看一些比較優秀的爬蟲的設計方案,比如說。 (一)如何學習Python 學習Python大致可以分為以下幾個階段: 1.剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數據結構、語法...
摘要:變量查找規則在中一個變量的查找順序是局部環境,閉包,全局,內建閉包引用了自由變量的函數。閉包的作用閉包的最大特點是可以將父函數的變量與內部函數綁定,并返回綁定變量后的函數,此時即便生成閉包的環境父函數已經釋放,閉包仍然存在。 導語:本文章記錄了本人在學習Python基礎之函數篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學習并交流。 本文重點: 1、掌握裝飾器的本質、功...
摘要:初步認識裝飾器函數裝飾器用于在源代碼中標記函數,以某種方式增強函數的行為。函數裝飾器在導入模塊時立即執行,而被裝飾的函數只在明確調用時運行。只有涉及嵌套函數時才有閉包問題。如果想保留函數原本的屬性,可以使用標準庫中的裝飾器。 《流暢的Python》筆記本篇將從最簡單的裝飾器開始,逐漸深入到閉包的概念,然后實現參數化裝飾器,最后介紹標準庫中常用的裝飾器。 1. 初步認識裝飾器 函數裝飾...
摘要:使用一年多了,一直知道有個裝飾器,很好用,試圖理解過,可能由于資料找的不好,自己的悟性太差,一直沒有搞清楚,今天查了一些資料,算是理解了,現在簡單記錄下。 使用python一年多了,一直知道python有個裝飾器,很好用,試圖理解過,可能由于資料找的不好,自己的悟性太差,一直沒有搞清楚,今天查了一些資料,算是理解了,現在簡單記錄下。python的裝飾器本身的功能是在不改變已有函數本身的...
閱讀 3170·2021-09-10 10:51
閱讀 3351·2021-08-31 09:38
閱讀 1639·2019-08-30 15:54
閱讀 3129·2019-08-29 17:22
閱讀 3214·2019-08-26 13:53
閱讀 1960·2019-08-26 11:59
閱讀 3283·2019-08-26 11:37
閱讀 3308·2019-08-26 10:47