繁体   English   中英

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

[英]decorators - trying to understand this simple example

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

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语法@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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM