系统学习Python——装饰器:函数装饰器-[添加装饰器参数:对装饰器参数计时]

分类目录:《系统学习Python》总目录


现在,我们使用前面文章中带参数的装饰器对装饰器参数计时:

def timer(label=''):
    def decorator(func):
        def onCall(*args):
            start = time.perf_counter()
            func(*args)
            print(label, time.perf_counter() - start)
        return onCall
    return decorator


@timer('===>')
def listcomp(N):
    return [x * 2 for x in range(N)]

@timer('===>')
def mapcall(N):
    return list(map((lambda x:x * 2), range(N)))

输入:

for func in (listcomp, mapcall):
    result = func(1000000)

输出:

===> 0.1224066999857314
===> 0.15470239997375757

这个为函数计时的装饰器可以用于模块中和交互式命令行下的任何函数。换言之,它作为一种多用途工具,自动获得了作为脚本中计时代码的资格。

需要注意的是,本文的计时器装饰器在任何函数上都有效,但是,要将其应用于类级别的方法上,需要进行细小的改写。简而言之,正如我们在前面文章《系统学习Python——装饰器:函数装饰器-[对方法进行装饰:基础知识]》中所介绍的,必须避免使用一个嵌套的类。由于这一变化被故意保留来作为我们本章末尾测试题的一个主题,因此在这里我们暫时不会给出完整的解答。

参考文献:
[1] Mark Lutz. Python学习手册[M]. 机械工业出版社, 2018.

你可能感兴趣的:(系统学习Python,Python,python,装饰器,元类,函数,类,方法)