奇怪的现象
我想知道这个"performance"本身运行了多久,于是在performance上面多加了个performance。
然而,运行结果显示的时间其实是运行了两次 fn 函数而已,也就是说performance了两次。
而且很有意思的是,当在fn中,我又多加两个 f 的执行代码时,fn的输出又增加两次。
这是为什么??
import time
def performance(f):
def fn(*args, **kwargs):
t1 = time.time()
r = f(*args,**kwargs)#把原函数赋给一个变量,用意是先执行一下原函数
f(*args,**kwargs)
f(*args,**kwargs)
t2 = time.time()
print 'printtime: %f call %s in %fs' %(time.time(), f.__name__,t2-t1)
return r
return fn
@performance
@performance
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1))
print factorial(10)
'''
这是输出结果:
printtime: 1432961567.452067 call factorial in 0.000606s
printtime: 1432961567.452212 call factorial in 0.000021s
printtime: 1432961567.452258 call factorial in 0.000019s
printtime: 1432961567.452268 call fn in 0.000809s
3628800
'''