注意
要让 @log 自适应任何参数定义的函数,可以利用Python的 *args 和 **kw,保证任意个数的参数总是能正常调用
python中编写无参数decorator
import time
import functools
#功能实现:打印函数的调用时间
def performance(f):
@functools.wraps(f)
def get_time(*args, **kw):
t1 = time.time()
r = f(*args, **kw)
t2 = time.time()
print('call %s() in %fs' %(f.__name__, (t2-t1)))
return r
return get_time
@performance
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1))
factorial(10)
python中编写带参数decorator
import time
import functools
# 功能实现:打印函数的调用时间,可以传入参数
def performance(unit):
def fn(func):
@functools.wraps(func)
def get_time(*args, **kw):
t1 = time.time()
r = func(*args, **kw)
t2 = time.time()
t = (t2 - t1) * 1000 if unit == 'ms' else (t2 - t1)
print('call %s() in %f %s' % (func.__name__, t, unit))
return r
return get_time
return fn
@performance('ms')
def factorial(n):
return reduce(lambda x, y: x * y, range(1, n + 1))
factorial(10)
来源:廖雪峰教程,做学习记录用(侵删)