基本上我正在尝试实现一个计时装饰器:
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)
我尝试了很多方法让它工作,但它们都返回了我不明白的有趣结果......我知道关于 SO 的主题还有多个其他问题,但不知何故它们对我没有帮助更好地了解应该如何完成。
最佳答案
装饰器函数将函数作为参数并返回修改后的函数。您的 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)
关于python - 装饰器——试图理解这个简单的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43608970/