装饰器
- 装饰器就是一个装饰函数的函数。装饰器是在函数调用之上的修饰。这些修饰仅是声明一个函数或方法的时候,才会应用的额外调用。
- 以@开头,然后是装饰器的名字和可选的参数。
# 装饰器没有参数,以下第二和第三处代码块等价
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)