基本上我正在尝试实现一个时序装饰器:
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)
Run Code Online (Sandbox Code Playgroud)
我尝试了许多方法让它起作用,但它们都返回了我不理解的有趣结果......我知道关于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)
Run Code Online (Sandbox Code Playgroud)
产量
2
3
4
5
6
7
8
9
0.000479936599731
Run Code Online (Sandbox Code Playgroud)
一开始@decorator语法可能有点神秘,但你最终会习惯它.:)
干
@laptime
def loop(a,b):
for i in range(a,b):
print(i)
Run Code Online (Sandbox Code Playgroud)
完全等同于:
def loop(a,b):
for i in range(a,b):
print(i)
loop = laptime(loop)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |