上一篇文章:Python是動(dòng)態(tài)語(yǔ)言:動(dòng)態(tài)添加或刪除屬性、方法
下一篇文章:私有化規(guī)則與屬性Property
1、無(wú)參數(shù)函數(shù)的裝飾器裝飾器功能:
引入日志
函數(shù)執(zhí)行時(shí)間統(tǒng)計(jì)
執(zhí)行函數(shù)前預(yù)備處理
執(zhí)行函數(shù)后清理功能
權(quán)限校驗(yàn)
緩存
實(shí)例:
from time import ctime,sleep def time_fun(func): #內(nèi)部包裹函數(shù) def wrapped_fun(): #ctime():打印當(dāng)前時(shí)間 print("%s 在 %s 時(shí)被調(diào)用"%(func.__name__,ctime())) #執(zhí)行函數(shù)執(zhí)行 func() #把內(nèi)部嵌套函數(shù)作為對(duì)象返回 return wrapped_fun @time_fun def test(): print("test 執(zhí)行了") test() #休眠3秒 sleep(3) test()
結(jié)果:
test 在 Wed Aug 15 22:19:51 2018 時(shí)被調(diào)用 test 執(zhí)行了 test 在 Wed Aug 15 22:19:53 2018 時(shí)被調(diào)用 test 執(zhí)行了2、有參數(shù)函數(shù)的裝飾器
實(shí)例:
from time import ctime,sleep def time_fun(func): #內(nèi)部包裹函數(shù) def wrapped_fun(a,b): #ctime():打印當(dāng)前時(shí)間 print("%s 在 %s 時(shí)被調(diào)用"%(func.__name__,ctime())) #執(zhí)行函數(shù)執(zhí)行 func(a,b) #把內(nèi)部嵌套函數(shù)作為對(duì)象返回 return wrapped_fun @time_fun def test(a,b): print(a+b) test(1,2) #休眠3秒 sleep(3) test(3,4)
結(jié)果:
test 在 Wed Aug 15 22:23:07 2018 時(shí)被調(diào)用 3 test 在 Wed Aug 15 22:23:10 2018 時(shí)被調(diào)用 73、不定長(zhǎng)函數(shù)的裝飾器
實(shí)例:
from time import ctime,sleep def time_fun(func): #內(nèi)部包裹函數(shù) def wrapped_fun(*args,**kwargs): #ctime():打印當(dāng)前時(shí)間 print("%s 在 %s 時(shí)被調(diào)用"%(func.__name__,ctime())) #執(zhí)行函數(shù)執(zhí)行 func(*args,**kwargs) #把內(nèi)部嵌套函數(shù)作為對(duì)象返回 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)
結(jié)果:
test 在 Wed Aug 15 22:26:36 2018 時(shí)被調(diào)用 6 test 在 Wed Aug 15 22:26:39 2018 時(shí)被調(diào)用 124、帶返回值函數(shù)的裝飾器
實(shí)例:
from time import ctime,sleep def time_fun(func): #內(nèi)部包裹函數(shù) def wrapped_fun(*args,**kwargs): #ctime():打印當(dāng)前時(shí)間 print("%s 在 %s 時(shí)被調(diào)用"%(func.__name__,ctime())) #執(zhí)行函數(shù)執(zhí)行 return func(*args,**kwargs) #把內(nèi)部嵌套函數(shù)作為對(duì)象返回 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))
結(jié)果:
test 在 Wed Aug 15 22:31:14 2018 時(shí)被調(diào)用 test-- 6 test2 在 Wed Aug 15 22:31:14 2018 時(shí)被調(diào)用 6 test 在 Wed Aug 15 22:31:17 2018 時(shí)被調(diào)用 test-- 6 test2 在 Wed Aug 15 22:31:17 2018 時(shí)被調(diào)用 125、裝飾器帶有參數(shù)
實(shí)例:
from time import ctime,sleep def time_fun_pre(pre="hello"): def time_fun(func): # 內(nèi)部包裹函數(shù) def wrapped_fun(*args, **kwargs): # ctime():打印當(dāng)前時(shí)間 print("%s 在 %s 時(shí)被調(diào)用,pre參數(shù)為:%s" % (func.__name__, ctime(),pre)) # 執(zhí)行函數(shù)執(zhí)行 return func(*args, **kwargs) # 把內(nèi)部嵌套函數(shù)作為對(duì)象返回 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))
結(jié)果:
test 在 Wed Aug 15 22:43:27 2018 時(shí)被調(diào)用,pre參數(shù)為:mark_test test-- 6 test2 在 Wed Aug 15 22:43:27 2018 時(shí)被調(diào)用,pre參數(shù)為:mark_test2 6 test 在 Wed Aug 15 22:43:30 2018 時(shí)被調(diào)用,pre參數(shù)為:mark_test test-- 6 test2 在 Wed Aug 15 22:43:30 2018 時(shí)被調(diào)用,pre參數(shù)為:mark_test2 126、類裝飾器
python類裝飾性必須要接受一個(gè)callable對(duì)象作為參數(shù),然后返回一個(gè)callable對(duì)象,在python中,一般callable對(duì)象都是函數(shù),只要對(duì)象重寫了__call__()方法,那么這個(gè)對(duì)象就是callable對(duì)象。
實(shí)例:
class Test(): def __init__(self,func): print("test初始化:",func.__name__) self.func=func def __call__(self, *args, **kwargs): print("我調(diào)用了") self.func @Test def test(): print("--test--") test()
結(jié)果:
test初始化: test 我調(diào)用了
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42245.html
摘要:以下這些項(xiàng)目,你拿來學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個(gè)步驟都能做到很優(yōu)秀的時(shí)候,你應(yīng)該考慮如何組合這四個(gè)步驟,使你的爬蟲達(dá)到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設(shè)計(jì)方案,比如說。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個(gè)階段: 1.剛上手的時(shí)候肯定是先過一遍Python最基本的知識(shí),比如說:變量、數(shù)據(jù)結(jié)構(gòu)、語(yǔ)法...
摘要:變量查找規(guī)則在中一個(gè)變量的查找順序是局部環(huán)境,閉包,全局,內(nèi)建閉包引用了自由變量的函數(shù)。閉包的作用閉包的最大特點(diǎn)是可以將父函數(shù)的變量與內(nèi)部函數(shù)綁定,并返回綁定變量后的函數(shù),此時(shí)即便生成閉包的環(huán)境父函數(shù)已經(jīng)釋放,閉包仍然存在。 導(dǎo)語(yǔ):本文章記錄了本人在學(xué)習(xí)Python基礎(chǔ)之函數(shù)篇的重點(diǎn)知識(shí)及個(gè)人心得,打算入門Python的朋友們可以來一起學(xué)習(xí)并交流。 本文重點(diǎn): 1、掌握裝飾器的本質(zhì)、功...
摘要:初步認(rèn)識(shí)裝飾器函數(shù)裝飾器用于在源代碼中標(biāo)記函數(shù),以某種方式增強(qiáng)函數(shù)的行為。函數(shù)裝飾器在導(dǎo)入模塊時(shí)立即執(zhí)行,而被裝飾的函數(shù)只在明確調(diào)用時(shí)運(yùn)行。只有涉及嵌套函數(shù)時(shí)才有閉包問題。如果想保留函數(shù)原本的屬性,可以使用標(biāo)準(zhǔn)庫(kù)中的裝飾器。 《流暢的Python》筆記本篇將從最簡(jiǎn)單的裝飾器開始,逐漸深入到閉包的概念,然后實(shí)現(xiàn)參數(shù)化裝飾器,最后介紹標(biāo)準(zhǔn)庫(kù)中常用的裝飾器。 1. 初步認(rèn)識(shí)裝飾器 函數(shù)裝飾...
摘要:最近看前端都展開了幾場(chǎng)而我大知乎最熱語(yǔ)言還沒有相關(guān)。有關(guān)書籍的介紹,大部分截取自是官方介紹。但從開始,標(biāo)準(zhǔn)庫(kù)為我們提供了模塊,它提供了和兩個(gè)類,實(shí)現(xiàn)了對(duì)和的進(jìn)一步抽象,對(duì)編寫線程池進(jìn)程池提供了直接的支持。 《流暢的python》閱讀筆記 《流暢的python》是一本適合python進(jìn)階的書, 里面介紹的基本都是高級(jí)的python用法. 對(duì)于初學(xué)python的人來說, 基礎(chǔ)大概也就夠用了...
摘要:使用一年多了,一直知道有個(gè)裝飾器,很好用,試圖理解過,可能由于資料找的不好,自己的悟性太差,一直沒有搞清楚,今天查了一些資料,算是理解了,現(xiàn)在簡(jiǎn)單記錄下。 使用python一年多了,一直知道python有個(gè)裝飾器,很好用,試圖理解過,可能由于資料找的不好,自己的悟性太差,一直沒有搞清楚,今天查了一些資料,算是理解了,現(xiàn)在簡(jiǎn)單記錄下。python的裝飾器本身的功能是在不改變已有函數(shù)本身的...
閱讀 3179·2021-09-10 10:51
閱讀 3361·2021-08-31 09:38
閱讀 1655·2019-08-30 15:54
閱讀 3142·2019-08-29 17:22
閱讀 3222·2019-08-26 13:53
閱讀 1973·2019-08-26 11:59
閱讀 3292·2019-08-26 11:37
閱讀 3319·2019-08-26 10:47