為什么返回的不是perf_decorator。而是wrapper
import time, functools
def performance(unit):
? ? def perf_decorator(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__
2020-03-15
@decorator 不是普通的函數,他是對目的函數進行修飾, 不帶參數是兩層嵌套、帶參數是三層嵌套,取得函數被真正調用的那一層函數名,