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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

python

python文件下载速度 装饰器_python学习笔记之---装饰器

發(fā)布時(shí)間:2025/3/11 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python文件下载速度 装饰器_python学习笔记之---装饰器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

# -*- coding:utf-8 -*-

'''示例1: 最簡(jiǎn)單的函數(shù),表示調(diào)用了兩次'''

def myfunc():

print ("myfunc() called.")

myfunc()

myfunc()

E:\>py -3 a.py

myfunc() called.

myfunc() called.

第二步:使用裝飾函數(shù)在函數(shù)執(zhí)行前和執(zhí)行后分別附加額外功能

'''示例2: 替換函數(shù)(裝飾)裝飾函數(shù)的參數(shù)是被裝飾的函數(shù)對(duì)象,返回原函數(shù)對(duì)象

裝飾的實(shí)質(zhì)語(yǔ)句: myfunc = deco(myfunc)'''

defdeco(func):print ("before myfunc() called.")

func()print ("after myfunc() called.")returnfuncdefmyfunc():print ("myfunc() called.")

myfunc=deco(myfunc)

myfunc()

myfunc()

E:\>py -3 a.py

before myfunc() called.

myfunc() called.

after myfunc() called.

myfunc() called.

myfunc() called.

第三步:

'''示例3: 使用語(yǔ)法@來(lái)裝飾函數(shù),相當(dāng)于“myfunc = deco(myfunc)”

但發(fā)現(xiàn)新函數(shù)只在第一次被調(diào)用,且原函數(shù)多調(diào)用了一次'''

defdeco(func):print ("before myfunc() called.")

func()print ("after myfunc() called.")returnfunc

@deco #等價(jià)于:deco(myfunc)defmyfunc():print ("myfunc() called.")

myfunc()

myfunc()

E:\>py -3 a.py

before myfunc() called.

myfunc() called.

after myfunc() called.

myfunc() called.

myfunc() called.

------->>>>>>

執(zhí)行邏輯:

deco(myfunc)

print?("before?myfunc()?called.")

myfunc()

print?("??after?myfunc()?called.")

print?("?myfunc()?called.")

print?("?myfunc()?called.")

第四步:使用內(nèi)嵌包裝函數(shù)來(lái)確保每次新函數(shù)都被調(diào)用

裝飾器的規(guī)則:

規(guī)則1:

函數(shù)func上面定義了@xxxx,那么等價(jià)于?func?=?xxxx(func)

規(guī)則2:

裝飾函數(shù)xxxx,必須返回一個(gè)閉包(一個(gè)內(nèi)置函數(shù)+func)

'''示例4: 使用內(nèi)嵌包裝函數(shù)來(lái)確保每次新函數(shù)都被調(diào)用,

內(nèi)嵌包裝函數(shù)的形參和返回值與原函數(shù)相同,裝飾函數(shù)返回內(nèi)嵌包裝

函數(shù)對(duì)象'''

defdeco(func):def_deco():print ("before myfunc() called.")

func()print ("after myfunc() called.")#不需要返回func,實(shí)際上應(yīng)返回原函數(shù)的返回值

return_deco

@decodefmyfunc():print ("myfunc() called.")return 'ok'myfunc() #---->執(zhí)行閉包函數(shù)_deco()

myfunc()#---->執(zhí)行閉包函數(shù)_deco()

#myfunc=deco(myfunc)----->返回一個(gè)閉包:_deco的函數(shù)+myfunc

E:\>py -3 a.py

before myfunc() called.

myfunc() called.

after myfunc() called.

before myfunc() called.

myfunc() called.

after myfunc() called.

分析:

defdeco(func):def_deco():print ("before myfunc() called.")

func()print ("after myfunc() called.")#不需要返回func,實(shí)際上應(yīng)返回原函數(shù)的返回值

return_deco

閉包:_deco+func

@decodefmyfunc():print ("myfunc() called.")return 'ok'myfunc=deco(myfunc)

myfunc是什么?是閉包:_deco+myfunc

myfunc()--->_deco()

myfunc()--->_deco()defouter(name):definner():print(name)returninner

閉包:inner+name

執(zhí)行過(guò)程解釋:

裝飾函數(shù)deco

被裝飾函數(shù)myfunc

@deco

def myfunc():???--->myfunc= deco(myfunc)

myfunc= deco(myfunc)干了什么呢?

1 調(diào)用了deco(myfunc)

2??返回閉包:_deco+外包變量myfunc

3 閉包賦值給了myfunc

4 提醒myfunc變?yōu)榱碎]包函數(shù)對(duì)象

myfunc()---》干了什么呢?

1 _deco()執(zhí)行了

2 print ("before myfunc() called.")

3 myfunc()

4 print ("??after myfunc() called.")

myfunc()---》干了什么呢?

1 _deco()執(zhí)行了

2 print ("before myfunc() called.")

3 myfunc()

4 print ("??after myfunc() called.")

第五步:對(duì)帶參數(shù)的函數(shù)進(jìn)行裝飾

'''示例5: 對(duì)帶參數(shù)的函數(shù)進(jìn)行裝飾,

內(nèi)嵌包裝函數(shù)的形參和返回值與原函數(shù)相同,裝飾函數(shù)返回內(nèi)嵌包裝

函數(shù)對(duì)象'''

defdeco(func):def_deco(a, b):print ("before myfunc() called.")

ret=func(a, b)print ("after myfunc() called. result: %s" %ret)returnretreturn_deco

@decodefmyfunc(a, b):print ("myfunc(%s,%s) called." %(a, b))return a +b

myfunc(1, 2)

myfunc(3, 4)

E:\>py -3 a.py

before myfunc() called.

myfunc(1,2) called.

after myfunc() called. result: 3

before myfunc() called.

myfunc(3,4) called.

after myfunc() called. result: 7

第六步:對(duì)參數(shù)數(shù)量不確定的函數(shù)進(jìn)行裝飾

'''示例6: 對(duì)參數(shù)數(shù)量不確定的函數(shù)進(jìn)行裝飾,

參數(shù)用(*args, **kwargs),自動(dòng)適應(yīng)變參和命名參數(shù)'''

defdeco(func):def _deco(*args, **kwargs):print ("before %s called." % func.__name__)

ret= func(*args, **kwargs)print ("after %s called. result: %s" % (func.__name__, ret))returnretreturn_deco

@decodefmyfunc(a, b):print ("myfunc(%s,%s) called." %(a, b))return a+b

@decodefmyfunc2(a, b, c):print ("myfunc2(%s,%s,%s) called." %(a, b, c))return a+b+c

myfunc(1, 2)

myfunc(3, 4)

myfunc2(1, 2, 3)

myfunc2(3, 4, 5)

E:\>py -3 a.py

before myfunc called.

myfunc(1,2) called.

after myfunc called. result: 3

before myfunc called.

myfunc(3,4) called.

after myfunc called. result: 7

before myfunc2 called.

myfunc2(1,2,3) called.

after myfunc2 called. result: 6

before myfunc2 called.

myfunc2(3,4,5) called.

after myfunc2 called. result: 12

第七步:被裝飾函數(shù)加參數(shù):帶參數(shù)的裝飾器本質(zhì)都是兩層閉包

'''示例7: 在示例4的基礎(chǔ)上,讓裝飾器帶參數(shù),

和上一示例相比在外層多了一層包裝。

裝飾函數(shù)名實(shí)際上應(yīng)更有意義些'''

defdeco(arg):def_deco(func):def __deco():print ("before %s called [%s]." % (func.__name__, arg))

func()print ("after %s called [%s]." % (func.__name__, arg))return __deco

return_deco

@deco("mymodule")defmyfunc():print ("myfunc() called.")

@deco("module2")defmyfunc2():print ("myfunc2() called.")

myfunc()

myfunc2()

'''

1)多了一步:deco("hello") ---》返回了閉包:__deco+s

deco=閉包:__deco+s

2)@deco--->__deco(func)+s--->返回了一個(gè)閉包_deco+func+s

后面的過(guò)程跟上一步的過(guò)程一樣。

'''

E:\>py -3 a.py

before myfunc called [mymodule].

myfunc() called.

after myfunc called [mymodule].

before myfunc2 called [module2].

myfunc2() called.

after myfunc2 called [module2].

第八步:讓裝飾器帶 類 參數(shù)

'''示例8: 裝飾器帶類參數(shù)'''

classlocker:def __init__(self):print ("locker.__init__() should be notcalled.")

@staticmethoddefacquire():print ("locker.acquire() called.(這是靜態(tài)方法)")

@staticmethoddefrelease():print ("locker.release() called.(不需要對(duì)象實(shí)例)")defdeco(cls):'''cls 必須實(shí)現(xiàn)acquire和release靜態(tài)方法'''

def_deco(func):def __deco():print("before %s called [%s]." %(func.__name__, cls))

cls.acquire()try:returnfunc()finally:

cls.release()return __deco

return_deco

@deco(locker)defmyfunc():print ("myfunc() called.")

myfunc()

myfunc()

E:\>py -3 a.py

before myfunc called [].

locker.acquire() called.(這是靜態(tài)方法)

myfunc() called.

locker.release() called.(不需要對(duì)象實(shí)例)

before myfunc called [].

locker.acquire() called.(這是靜態(tài)方法)

myfunc() called.

locker.release() called.(不需要對(duì)象實(shí)例)

第九步:裝飾器帶類參數(shù),并分拆公共類到其他py文件中,同時(shí)演示了對(duì)一個(gè)函數(shù)應(yīng)用多個(gè)裝飾器

'''mylocker.py: 公共類 for 示例9.py'''

classmylocker:def __init__(self):print("mylocker.__init__() called.")

@staticmethoddefacquire():print("mylocker.acquire() called.")

@staticmethoddefunlock():print("mylocker.unlock() called.")classlockerex(mylocker):

@staticmethoddefacquire():print("lockerex.acquire() called.")

@staticmethoddefunlock():print("lockerex.unlock() called.")deflockhelper(cls):'''cls 必須實(shí)現(xiàn)acquire和release靜態(tài)方法'''

def_deco(func):def __deco(*args, **kwargs):print("before %s called." %func.__name__)

cls.acquire()try:return func(*args, **kwargs)finally:

cls.unlock()return __deco

return _deco

'''示例9: 裝飾器帶類參數(shù),并分拆公共

類到其他py文件中

同時(shí)演示了對(duì)一個(gè)函數(shù)應(yīng)用多個(gè)裝飾

器'''

from mylocker import *

classexample:

@lockhelper(mylocker)defmyfunc(self):print ("myfunc() called.")

@lockhelper(mylocker)

@lockhelper(lockerex)defmyfunc2(self, a, b):print ("myfunc2() called.")return a +bif __name__=="__main__":

a=example()

a.myfunc()print(a.myfunc())print (a.myfunc2(1, 2))print (a.myfunc2(3, 4))

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的python文件下载速度 装饰器_python学习笔记之---装饰器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 久久99久久99精品 | 国产欧美精品一区二区三区 | 91av一区二区三区 | 免费欧美一区 | 兔费看少妇性l交大片免费 日韩高清不卡 | 国产成人精品午夜福利Av免费 | 国产在线一区二区视频 | 久久久久久网址 | 极品销魂美女一区二区三区 | 欧美特级黄色片 | 扒开jk护士狂揉免费 | 青青草国产一区二区三区 | 欧美成人手机在线 | 97免费在线| 亚洲午夜av久久乱码 | 日批免费看 | 中文字幕乱码人妻无码久久95 | 3p在线播放 | 国产在成人精品线拍偷自揄拍 | 国产丝袜av| 国产亚洲av综合人人澡精品 | 伊人啪啪 | 亚洲国产精品久久 | 中文字幕亚洲一区二区三区五十路 | 精品国产a线一区二区三区东京热 | 成人综合色站 | 日在线视频 | 欧美激情在线播放 | 最好看的中文字幕国语电影mv | 久久福利电影 | 欧美激情一区二区三区免费观看 | 免费的av片| 欧美日韩一区二区中文字幕 | 巨物撞击尤物少妇呻吟 | 欧洲免费av | 国产一级黄色片子 | 草草影院欧美 | 欧美视频h| 男人av的天堂 | 在线精品小视频 | 丝袜视频一区 | 99日韩| 免费大片av | 一级aaaa毛片 | jjzz日本视频 | 日韩视频在线观看二区 | 黄色片网站在线看 | 人人插人人 | av导航网址| 成人午夜精品视频 | 日韩精品xxx | 亚洲熟妇av乱码在线观看 | 国产91一区在线精品 | 国产高清免费在线观看 | 美女伊人网 | 欧美精品入口蜜桃 | 性欧美久久 | 亚洲女女做受ⅹxx高潮 | 91大神在线看 | 浪漫樱花在线观看高清动漫 | 亚洲高清福利 | 日韩色图一区 | 91精品国产91久久久久青草 | 日本黄色成人 | 国产私人影院 | 色男天堂 | 岛国黄色片 | 亚洲成人午夜影院 | 久热青草| 一本色道久久亚洲综合精品蜜桃 | fexx性欧美 | 亚洲精品性视频 | 午夜精品毛片 | 欧美视频在线观看视频 | 黄频在线 | av国产网站| 国产精品传媒一区二区 | 9i在线看片成人免费 | 日本在线一级 | 欧美午夜网站 | 中文字幕精品三区 | www.黄色一片 | 涩涩小网站 | 在哪里可以看黄色片 | 久久精品999 | k8yy毛片| 亚洲精品国产电影 | 亚洲精品成人无码熟妇在线 | 黄色片网站在线播放 | 国产日韩欧美高清 | 精品一区二区在线免费观看 | 午夜精品久久久久久毛片 | xxxx性视频 | 深夜免费视频 | 国产农村妇女精品一区二区 | 蜜臀久久99精品久久久久久宅男 | 国产免费中文字幕 | 激情小说亚洲图片 | 男人的天堂手机在线 |