#-*- coding: UTF-8 -*-
import time
def foo():
print('in foo()')
def timeit(func):
# 定义一个内嵌的包装函数,给传入的函数加上计时功能的包装
def wrapper():
start = time.clock()
func()
end =time.clock()
print ('used:', end - start)
# 将包装后的函数返回
return wrapper
@timeit
def foo2():
print("in foo2")
foo = timeit(foo)
foo()
print("_*_"*20)
foo3= timeit(foo2)
foo3()
print("_*_"*20)
foo2()
结果:
in foo()
used: 0.00016424599357094254
_*__*__*__*__*__*__*__*__*__*__*__*__*__*__*__*__*__*__*__*_
in foo2
used: 2.4441368090914078e-05
used: 0.0005895257983528473
_*__*__*__*__*__*__*__*__*__*__*__*__*__*__*__*__*__*__*__*_
in foo2
used: 2.7863159623642037e-05
[Finished in 15.0s]
请说明为什么调用foo3 会出现两次used?
因为你的
foo2
已经在定义时就被timeit
装饰(语法上@
)了一次啦! 装饰后的foo2
又被timeit
显示装饰(函数调用)一次并赋给foo3
, 所以会出现两次used.