Python 装饰者-试图理解这个简单的例子

Python 装饰者-试图理解这个简单的例子,python,decorator,Python,Decorator,基本上,我正在尝试实现一个计时装饰器: 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) 我尝试了很多方法

基本上,我正在尝试实现一个计时装饰器:

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)

我尝试了很多方法使它工作,但他们都返回有趣的结果,我不明白。。。我知道关于这个主题还有很多其他的问题,但不知何故,这些问题对我更好地理解应该如何做没有帮助。

装饰函数将函数作为参数并返回修改过的函数。您的
laptime
没有返回修改后的函数(
internal
),并且它在
returnr
上有错误的缩进

这是一个修复过的版本。我还对其进行了更改,使其能够在Python2和Python3上正确运行

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
语法一开始可能有点神秘,但最终你会习惯的

完全等同于此:

def loop(a,b):
    for i in range(a,b):
        print(i)

loop = laptime(loop)

是的,我想我现在感觉好多了。。。直到下次!谢谢
def loop(a,b):
    for i in range(a,b):
        print(i)

loop = laptime(loop)