@functools.wraps(f)放置位置问题
import time, functools
def performance(unit):
def perf_decorator(f):
@functools.wraps(f)
def wrapper(*args,**kw):
t1 = time.time()
r = f(*args,**kw)
t2 = time.time()
t = (t2-t1)*1000 if unit == 'ms' else (t2-t1)
print 'call %s() in %f%s'%(f.__name__,t,unit)
return r
return wrapper
return perf_decorator
@performance('ms')
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1))
print factorial.__name__
1、为什么@functools.wraps(f)不是放在 def perf_decorator(f):之前么??
2、经过带参数的decorator(即performance('ms'))之后factorial(n)函数的函数不是应该变成了perf_decorator么??