Python 程序运行时间计时

简单性能分析

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 9,234评论 0 27
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 8,192评论 0 9
  • 闭包和装饰器 1.8 闭包和装饰器 学习目标 1. 能够说出闭包的定义形式 2. 能够说出装饰器的实现形式 ...
    Cestine阅读 3,584评论 0 0
  • 装饰器函数 楔子 作为一个会写函数的python开发,我们从今天开始要去公司上班了。写了一个函数,就交给其他开发用...
    go以恒阅读 1,877评论 0 0
  • 看着熟睡的你,是那么的美。眼睛轻轻地闭上,弯弯的眉毛也静静地睡在你红润的脸上。嘴角微微地上翘。你的呼吸声是...
    智慧l阅读 3,680评论 0 0

友情链接更多精彩内容