裝飾器
- 裝飾器就是一個裝飾函數的函數。裝飾器是在函數調用之上的修飾。這些修飾僅是聲明一個函數或方法的時候,纔會應用的額外調用。
- 以@開頭,然後是裝飾器的名字和可選的參數。
# 裝飾器沒有參數,以下第二和第三處代碼塊等價
def deco1():
pass
def foo():
pass
foo = deco1(foo)
@deco1
def foo():
pass
# 如果裝飾器帶參數的話,以下第二和第三處代碼塊等價
def deco2(args):
pass
def bar():
pass
bar = deco2(args)(bar)
@deco2(args)
def bar():
pass
# 實際例子
from time import ctime, sleep
def tsfunc(func):
def wrappedFunc():
print('[%s] %s() called' % (ctime(), func.__name__))
return func() # 調用一下
return wrappedFunc # 返回修飾後的函數
@tsfunc
def foo(): # 等價於 foo = tsfunc(foo)
pass
for i in range(3):
foo()
sleep(1)