Python 程序运行时间计时

作者: Python高效编程 | 来源:发表于2019-02-20 21:27 被阅读3次

    简单性能分析

    Written By Python高效编程

    装饰器实现:

    @timer 就相当于 timer(waste_some_time) 的简化版本。

    装饰器是一种将函数作为参数并进行包装(加强函数功能)的“语法糖”,具有方便、易用、可复用的特点。

    其中 wrapper 函数,是 timer 函数的内置函数,可以使用 timer 函数中的局部变量。也就是说,在 wrapper 函数内部,可以直接使用 timer 函数传进来的参数 func。

    wrapper(*args, **kwargs)、func(*args, **kwargs) 表示接受任何参数。如果括号中空白的话,传进来的 func 如果有参数的话,Python 解释器会报错。

    # 错误写法
    def do_twice(func):
        def wrapper():
            func()
            func()
        return wrapper
    
    @do_twice
    def waste_some_time(vol):
        ulist = []
        for i in range(vol):
            ulist.append(i)
    # TypeError: waste_some_time() missing 1 required positional argument: 'vol'
    

    正确操作如下:

    # 微信公众号:Python高效编程
    import functools
    import time
    ## 装饰器
    def timer(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            begin_time = time.perf_counter()
            value = func(*args, **kwargs)
            end_time = time.perf_counter()
            run_time = end_time - begin_time
            print('{} 共用时:{} s'.format(func.__name__, run_time))
            return value
        return wrapper
    
    @timer
    def waste_some_time():
        ulist = []
        for i in range(1000):
            ulist.append(i)
    #输出:waste_some_time 共用时:8.039700333029032e-05 s
    

    ipython 与 jupyert notebook

    魔法命令:%timeit waste_some_time()

    输出: 56.7 µs ± 204 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
    https://blog.csdn.net/weixin_43773093/article/details/87824347

    相关文章

      网友评论

        本文标题:Python 程序运行时间计时

        本文链接:https://www.haomeiwen.com/subject/qfmkyqtx.html