基本上我正在尝试实现时序装饰器:
def laptime(func):
def inner(*args):
start = time.time()
r = func(*args)
print time.time()-start
return r
@laptime
def loop(a,b):
for i in range(a,b):
print (i)
loop(2, 1000)
我尝试了许多方法让它发挥作用,但它们都返回了我不理解的有趣结果......我知道关于这个主题还有其他多个问题,但不知怎的,它们对我来说没什么用。更好地掌握如何做到这一点。
答案 0 :(得分:6)
装饰器函数将函数作为参数并返回修改后的函数。您的laptime
未返回修改后的函数(inner
),并且return r
上的缩进错误。
这是修复后的版本。我也改变了它,因此它可以在Python 2& Python 3。
import time
def laptime(func):
def inner(*args):
start = time.time()
r = func(*args)
print(time.time() - start)
return r
return inner
@laptime
def loop(a,b):
for i in range(a,b):
print(i)
loop(2, 10)
<强>输出强>
2
3
4
5
6
7
8
9
0.000479936599731
@decorator
语法起初可能有点神秘,但你最终会习惯它。 :)
否则
@laptime
def loop(a,b):
for i in range(a,b):
print(i)
完全等同于:
def loop(a,b):
for i in range(a,b):
print(i)
loop = laptime(loop)