1. 程式人生 > 其它 >軟體測試的基本知識彙總

軟體測試的基本知識彙總

import time
def timer(func):
def deco(*args, **kwargs):
stat_time = time.time()
func(*args, **kwargs)
print(func)
stop_time = time.time()
print('the func run time is{}'.format(stop_time - stat_time))
return deco
# @timer
def test1():
time.sleep(2)
print('in the test1')
test1 = timer(test1)
test1()
'''
裝飾器 :
要理解python裝飾器,首先需要分清一個點,
函式名和函式體
函式體只是放在記憶體空間中的資料(和其他資料沒有不同,都是電路開關狀態的集合)
函式名是指向函式體儲存空間的一個路標,而路標不止一個
當某個函式名改變時,這個函式名這個路標不再指向之前的函式體空間,而指向新的函式體空間
久的函式體空間不會發生變化,只是函式名的指向作用變化了
就算一個函式體空間沒有任何函式名路標指向他,他也不會立刻消失,
計算機會隔一段時間去處理,並非即時的。

如上程式碼所示,將test1這個路標以實參的方式傳給timer中的func
那麼,test1func是作用相同的,指向同一個函式體空間的路標
而這個函式體空間現在有兩個函式名路標指向他
timer的返回值,deco同樣也是一個指向另一個函式體空間的路標
在這個函式體空間中,有著func這個路標,這應該涉及到python的預編譯
或者是實參會直接通過形參傳給函式內部呼叫位置。
最後將返回出的deco函式名路標賦值給test1
test1不再和func一樣指向同一個函式體空間,
而是同deco一樣,指向另一個函式體空間
所以此時通過test1來找函式體空間,只能找到新的函式體空間
裝飾器就ok
@timer的作用相當於test1 = timer(test1)
是開發者做的糖
'''