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