pythonexpect后怎么循环_python 装饰器从放弃到玩转(初级)
裝飾器是困擾我很久的問題,最近突然開竅,理解了裝飾器的含義 執(zhí)行過程以及原理
裝飾器:(本質(zhì)是函數(shù),裝飾其他函數(shù),幫其他函數(shù)實(shí)現(xiàn)附加的功能)
器:代表函數(shù)
裝飾:代表裝飾這個(gè)函數(shù)
原則:不能修改裝飾的函數(shù)內(nèi)部源代碼
不能修改原來函數(shù)的調(diào)用方式
裝飾器公式:
高階函數(shù)+嵌套函數(shù) == 裝飾器
(這里不對高階函數(shù)和嵌套函數(shù)做解釋,請先了解什么叫做高階函數(shù)和嵌套函數(shù))
下面從一個(gè)簡單的程序讓你了解裝飾器的含義
假如我現(xiàn)在有這么兩個(gè)別人寫的函數(shù),我們這在聯(lián)合開發(fā),現(xiàn)在有個(gè)需求需要對這兩個(gè)函數(shù)進(jìn)行性能的統(tǒng)計(jì),也就是計(jì)算這兩個(gè)函數(shù)的運(yùn)行時(shí)間,但是不允許你去修改對方的源代碼和調(diào)用方式,有人會說這很簡單,可以在函數(shù)的調(diào)用前后添加時(shí)間的統(tǒng)計(jì),再進(jìn)行計(jì)算,這樣是可以,如果我們有100個(gè)函數(shù)需要進(jìn)行統(tǒng)計(jì)呢,或者我今天想統(tǒng)計(jì)運(yùn)行時(shí)間,明天我只想記錄函數(shù)的運(yùn)行開始時(shí)間,難道我還得一個(gè)一個(gè)改嗎
def test1():
time.sleep(3)
print "test01"
def test2():
time.sleep(3)
print "test02"
test1()
test2()
下面介紹裝飾器,上面說到裝飾器的作用就是給現(xiàn)有函數(shù)添加附加功能,我們這邊利用裝飾器添加函數(shù)運(yùn)行時(shí)間統(tǒng)計(jì)
def record_time(func):
def warpper():
start_time = time.time()
func()
end_time = time.time()
print "總共用時(shí):" + str(int(end_time) - int(start_time))
return warpper
@record_time
def test1():
time.sleep(3)
print "test01"
@record_time
def test2():
time.sleep(3)
print "test02"
test1()
test2()
這是個(gè)很簡單的裝飾器用法,下面我一步一步解釋@record_time: 代表的是 test1 = record_time(test1)
這兩個(gè)test1代表的含義不同:
前面的test1=warpper,因?yàn)閞ecord_time(test1)時(shí),record_time里面直接返回的wapper的內(nèi)存地址
后面的test1的含義是test1函數(shù)本身
2.test1(),當(dāng)我們現(xiàn)在執(zhí)行test1()是,實(shí)際執(zhí)行的是warpper()
3.執(zhí)行warpper函數(shù)內(nèi)部代碼邏輯
4.打印函數(shù)開始時(shí)間
5.func()代表的是test1(),因?yàn)閞ecord_time(test1) test1==func
6.打印函數(shù)結(jié)束時(shí)間
可以看到執(zhí)行過程,未改變函數(shù)內(nèi)部的代碼邏輯,未改變表面看到的函數(shù)執(zhí)行方法
總結(jié)
以上是生活随笔為你收集整理的pythonexpect后怎么循环_python 装饰器从放弃到玩转(初级)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python opencv直方图_【py
- 下一篇: python加载html表格数据,使用p