#定義個簡單的函式
import time
def f():
print('hello')
time.sleep(1)
print('world')
#現在想增加這個函式的功能,比如統計一下執行時間,一種方案是直接修改該函式
def f():
start_time = time.time()
print('hello')
time.sleep(1)
print('world')
end_time = time.time()
print('程式執行時間為:%s' %(end_time-start_time))
f()#這種方法破壞了函式的封閉性,可以考慮把f這個函式作為引數傳入另外乙個函式run_time,在run_time裡執行函式f並統計時間
def f():
print('hello')
time.sleep(1)
print('world')
def run_time(f):
start_time = time.time()
f()end_time = time.time()
print('程式執行時間為:%s' %(end_time-start_time))
run_time(f)
#該例說明在python中,函式名可以作為另外乙個函式的引數進行傳遞
#此時,可以用裝飾器來完成該功能
def run_time(f):
start_time = time.time()
f()end_time = time.time()
print('程式執行時間為:%s' %(end_time-start_time))
@run_time
def f():
print('hello')
time.sleep(1)
print('world')
f()
裝飾器與函式名傳參比較的優點為:只需要知道有f這方法,並執行f()來執行即可通過裝飾器自動擴充套件函式的功能,使用者不需要知道還有乙個run_time方法,比較符合函式呼叫的習慣。 python之裝飾器篇
一.基本裝飾器 基本裝飾器的作用 在不改變原函式的基礎上,通過裝飾器,給原函式新增某些功能 實現方法 在原函式上加 裝飾器名字 其中 叫做語法糖 定義裝飾器 第一層函式傳入引數 用於傳入原函式 第二層使用原函式的同時,加入需要新增的功能 第一層函式要返回第二層函式名 整個函式形成閉包 import ...
python基礎 裝飾器
裝飾器本質就是函式,功能是為其他函式新增附加功能。原則 不修改被修飾函式的源 不修改被修飾函式的呼叫方式 裝飾器的知識儲備 裝飾器 高階函式 函式巢狀 閉包 import time 定義乙個裝飾器計算函式執行時間 def timer func start time time.time res fun...
python基礎 裝飾器
裝飾器形成的過程 最簡單的裝飾器 有返回值的 有乙個引數 萬能引數 裝飾器的作用 原則 開放封閉原則 語法糖 裝飾器的固定模式 import time print time.time 獲取當前時間 time.sleep 10 讓程式在執行到這個位置的時候停一會兒 def timmer f 裝飾器函式...