当前位置:首页 > 科技  > 软件

你写的Python代码到底多快?这些测试工具了解了解

来源: 责编: 时间:2023-11-02 17:12:30 368观看
导读当我们写完一个脚本或一个函数,首先能保证得到正确结果,其次尽可能的快(虽然会说Py这玩意咋整都慢,但有的项目就是得要基于Py开发)。本期将总结几种获取程序运行时间的方法,极大的帮助对比不同算法/写法效率。使用系统命令

当我们写完一个脚本或一个函数,首先能保证得到正确结果,其次尽可能的快(虽然会说Py这玩意咋整都慢,但有的项目就是得要基于Py开发)。jgk28资讯网——每日最新资讯28at.com

本期将总结几种获取程序运行时间的方法,极大的帮助对比不同算法/写法效率。jgk28资讯网——每日最新资讯28at.com

jgk28资讯网——每日最新资讯28at.com

使用系统命令

每个操作系统都有自己的方法来算程序运行的时间,比如在Windows PowerShell中,可以用 Measure-Command 来看一个Python文件的运行时间:jgk28资讯网——每日最新资讯28at.com

Measure-Command {python tutorial.py}

jgk28资讯网——每日最新资讯28at.com

在Ubuntu中,使用time命令:jgk28资讯网——每日最新资讯28at.com

time python tutorial.py

如果我们除了看整个 Python 脚本的运行时间外还想看看局部运行时间咋整jgk28资讯网——每日最新资讯28at.com

使用 IPython 的 Magic Command

如果你使用过如Jupyter Notebook等工具会知道,他们用到了一个叫做 IPython 的交互式 Python 环境。jgk28资讯网——每日最新资讯28at.com

在 IPython 中,有一个特别方便的命令叫做 timeit。jgk28资讯网——每日最新资讯28at.com

对于某行代码的测量可以使用%timeit:jgk28资讯网——每日最新资讯28at.com

jgk28资讯网——每日最新资讯28at.com

对于某一个代码单元格的测量,可以使用%%timeit:jgk28资讯网——每日最新资讯28at.com

jgk28资讯网——每日最新资讯28at.com

使用timeit

如果不用IPython咋整,没关系,已经很厉害了,Python 有一个内置的timeit模块,可以帮助检测小段代码运行时间jgk28资讯网——每日最新资讯28at.com

可以在命令行界面运行如下命令:jgk28资讯网——每日最新资讯28at.com

python -m timeit '[i for i in range(100)]'

使用 timeit 测量执行此列表推导式所需的时间,得到输出:jgk28资讯网——每日最新资讯28at.com

200000 loops, best of 5: 1.4 usec per loop

此输出表明每次计时将执行200000次列表推导,共计时测试了5次,最好的结果是1.4毫秒。jgk28资讯网——每日最新资讯28at.com

或者直接在Python中调用:jgk28资讯网——每日最新资讯28at.com

import timeitprint(timeit.timeit('[i for i in range(100)]', number=1))

对于更复杂的情况,有三个参数需要考虑:jgk28资讯网——每日最新资讯28at.com

  • stmt:待测量的代码片段,默认是 pass
  • setup:在运行 stmt 之前执行一些准备工作,默认也是 pass
  • number:要运行 stmt 的次数

比如一个更复杂的例子:jgk28资讯网——每日最新资讯28at.com

import timeit# prerequisites before running the stmtmy_setup = "from math import sqrt"# code snippet we would like to measuremy_code = '''def my_function():    for x in range(10000000):        sqrt(x)'''print(timeit.timeit(setup=my_setup,                    stmt=my_code,                    number=1000))# 6.260000000000293e-05

使用time模块

Python中内置的time模块相信都不陌生,基本的用法是在待测代码段的起始与末尾分别打上时间戳,然后获得时间差:jgk28资讯网——每日最新资讯28at.com

import timedef my_function():    for i in range(10000000):        passstart = time.perf_counter()my_function()print(time.perf_counter()-start)# 0.1179838

我经常使用time.perf_counter()来获取时间,更精确,在之前的教程中有提过。jgk28资讯网——每日最新资讯28at.com

time模块中还有一些其他计时选择:jgk28资讯网——每日最新资讯28at.com

  • time.timer():获取当前时间
  • time.perf_counter():计算程序的执行时间(高分辨率)
  • time.monotonic():计算程序的执行时间(低分辨率)
  • time.process_time():计算某个进程的CPU时间
  • time.thread_time():计算线程的CPU时间

假如我们需要在多个代码段测试运行时间,每个首尾都打上时间戳再计算时间差就有点繁琐了,咋整,上装饰器:jgk28资讯网——每日最新资讯28at.com

import timedef log_execution_time(func):    def wrapper(*args, **kwargs):        start = time.perf_counter()        res = func(*args, **kwargs)        end = time.perf_counter()        print(f'The execution of {func.__name__} used {end - start} seconds.')        return res    return wrapper@log_execution_timedef my_function():    for i in range(10000000):        passmy_function()# The execution of my_function used 0.1156899 seconds.

如上例所示,这样就使得代码肥肠干净与整洁。jgk28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-16609-0.html你写的Python代码到底多快?这些测试工具了解了解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: React性能优化之useMemo、useCallback

下一篇: 增强现实可穿戴设备如何提高医疗保健效率

标签:
  • 热门焦点
  • 红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • 石头自清洁扫拖机器人G10S评测:多年黑科技集大成之作 懒人终极福音

    科技圈经常能看到一个词叫“缝合怪”,用来形容那些把好多功能或者外观结合在一起的产品,通常这样的词是贬义词,但如果真的是产品缝合的好、缝合的实用的话,那它就成了中性词,今
  • 分享六款相见恨晚的PPT模版网站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS网站旨在为全球Office用户提供丰富的高品质原创PPT模板、实用文档、数据图表及个性化定制服务。优点:OfficePLUS是微软官方网站,囊括PPT模板、Word模
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 为什么你不应该使用Div作为可点击元素

    按钮是为任何网络应用程序提供交互性的最常见方式。但我们经常倾向于使用其他HTML元素,如 div span 等作为 clickable 元素。但通过这样做,我们错过了许多内置浏览器的功能。
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • OPPO K11搭载高性能石墨散热系统:旗舰同款 性能凉爽释放

    日前OPPO官方宣布,将于7月25日14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼
  • 朋友圈可以修改可见范围了 苹果用户可率先体验

    近日,iOS用户迎来微信8.0.27正式版更新,除了可更换二维码背景外,还新增了多项实用功能。在新版微信中,朋友圈终于可以修改可见范围,简单来说就是已发布的朋友圈
Top