计时对于了解程序的性能是很关键的部分。

本文讨论了Python 2和python 3中计时方法,并完成了一个通用的计时装饰器。

一、python2和python3的通用计时方法
由于python2和3里面的计时函数是不一样的,建议使用timeit模块中的timeit.default_timer()

由timeit.default_timer()的官方文档可知,计时时间精度和平台以及使用的函数有关:

"Define a default timer, in a platform-specific manner. On Windows, time.clock() has microsecond granularity, but time.time()’s granularity is 1/60th of a second. On Unix, time.clock() has 1/100th of a second granularity, and time.time() is much more precise. On either platform, default_timer() measures wall clock time, not the CPU time. This means that other processes running on the same computer may interfere with the timing."

翻译过来就是,

“定义在默认的计时器中,针对不同平台采用不同方式。在Windows上,time.clock()具有微秒精度,但是time.time()精度是1/60s。在Unix上,time.clock()有1/100s精度,而且time.time()精度远远更高。在另外的平台上,default_timer()测量的是墙上时钟时间,不是CPU时间。这意味着同一计算机的其他进程可能影响计时。”

具体区别可以查看python2和3中timeit的实现:

python2中:

if sys.platform == "win32":
    # On Windows, the best timer is time.clock()
    default_timer = time.clock
else:
    # On most other platforms the best timer is time.time()
    default_timer = time.time
python3中:

default_timer = time.perf_counter
再由time.clock()的官方文档可以看出:

"Deprecated since version 3.3: The behaviour of this function depends on the platform: use perf_counter() or process_time() instead, depending on your requirements, to have a well defined behaviour."

翻译过来就是:

“python3.3版本后time.clock()就过时了:这个函数的行为受平台影响,用time.perf_counter()”或者time.process_time()代替来得到一个定义更好的行为,具体取决于你的需求。”

更多详细信息请看官方文档中的time.get_clock_info()

二、方便使用的计时装饰器
这一部分把计时函数写成python的装饰器形式,这样使用的时候只要在函数的定义前面加上“@装饰器名称”即可。

具体实现和测试代码如下,参考了《Fluent Python》7.7节的相关内容,并参考本文第一部分改成了Python2和Python3通用的版本。

import time, timeit
 
def clock(func):
    def clocked(*args):
        t0 = timeit.default_timer()
        result = func(*args)
        elapsed = timeit.default_timer() - t0
        name = func.__name__
        arg_str = ', '.join(repr(arg) for arg in args)
        print('[%0.8fs] %s(%s) -> %r' % (elapsed, name, arg_str, result))
        return result
    return clocked
 
@clock
def run(seconds):
    time.sleep(seconds)
    return time
 
if __name__ == '__main__':
   run(1)
其中的run函数只是为了测试,可以换成其他你需要的函数。只要在前面加上@clock就可以了。
--------------------- 
作者:FlyingPie 
来源:CSDN 
原文:https://blog.csdn.net/bobauditore/article/details/79377679?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!

Python中计时,看这一篇就够了相关推荐

  1. Python正则表达式,看这一篇就够了

    作者 | 猪哥 来源 | 裸睡的猪(ID: IT--Pig) 大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是每种语言都有自己的函数去支持正则,今天我们就来学习 Python中 ...

  2. Python操作MongoDB看这一篇就够了

    MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活.在这一节中,我们就来看 ...

  3. anaconda的安装和使用(管理python环境看这一篇就够了)

    anaconda的安装和使用(管理python环境看这一篇就够了) 前言 一.Anaconda是什么? 二.Anaconda安装 三.Anaconda使用教程 四.pycharm使用anaconda创 ...

  4. python装饰器功能是冒泡排序怎么做_传说中Python最难理解的点|看这完篇就够了(装饰器)...

    https://mp.weixin.qq.com/s/B6pEZLrayqzJfMtLqiAfpQ 1.什么是装饰器 网上有人是这么评价装饰器的,我觉得写的很有趣,比喻的很形象 每个人都有的内裤主要是 ...

  5. python详细安装教程-超详细Python与PyCharm安装教程,看这一篇就够了

    原标题:超详细Python与PyCharm安装教程,看这一篇就够了 学习了三天的python, 之前测试一直用课程自带的网页版玩玩, 为了学习 然后就下载了一个python和pycharm 现在分享下 ...

  6. docker 删除所有镜像_关于 Docker 镜像的操作,看完这篇就够啦 !(下)| 文末福利...

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  7. 如何应对大数据分析工程师面试Spark考察,看这一篇就够了

    作者丨斌迪.HappyMint 来源丨大数据与人工智能(ID:ai-big-data) [导读]本篇文章为大家带来spark面试指南,文内会有两种题型,问答题和代码题,题目大部分来自于网络上,有小部分 ...

  8. 聊聊Java8之后的JDK升级内容(看这一篇就够了)

    聊聊Java8之后的JDK升级内容(看这一篇就够了) 背景 从 JDK 8 到 JDK 17 的新特性 JDK8 回顾 JDK9 JDK10 JDK11 JDK12 JDK13 JDK14 JDK15 ...

  9. api网关选型_如何轻松打造百亿流量API网关?看这一篇就够了(下)

    如何轻松打造百亿流量API网关?看这一篇就够了(上) 上篇整体描述了网关的背景,涉及职能.分类.定位环节,本篇进入本文的重点,将会具体谈下百亿级流量API网关的演进过程. 准备好瓜子花生小板凳开始积累 ...

  10. serviceloader java_【java编程】ServiceLoader使用看这一篇就够了

    转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...

最新文章

  1. 转载:VMware虚拟机时钟不准的问题(linux图形界面投影到windows配置参考)--略有修改...
  2. response code 404 500
  3. java io 文件路径_如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径...
  4. java中sort函数comparator的使用_Java Comparator comparingInt()用法及代码示例
  5. win10系统电脑c盘哪些文件可以删除,c盘可以删除的文件有哪些
  6. Echarts 折线图最后一个点发光闪烁效果
  7. Luogu3792 由乃与大母神原型和偶像崇拜
  8. python分析html文件_如何用Python解析HTML?
  9. Android音量系统分析
  10. acm-(dp计数)Educational Codeforces Round 97 (Rated for Div. 2) F. Emotional Fishermen
  11. Sometimes you will never know the true value of a moment until it becomes a memory
  12. arn : 无法加载文件 C:\Users\zky\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.
  13. CSS——网易云音乐首页之榜单区域的实现
  14. 电量监测程序 c语言,基于单片机的电量检测系统设计方案.doc
  15. 聂文涛谈糖尿病并发症的成因
  16. 带你了解「美团、百度和滴滴」的分布式 ID 生成系统
  17. 满满干货 | 建议收藏,这样做报价表,才是真的完美又专业.
  18. CE修改植物大战僵尸-关卡基址(小宇特详解)
  19. 鹅厂一面凉经------也许这就是成长吧!
  20. CSS ul li:nth-child的详细实例

热门文章

  1. 2021年“春秋杯”新年欢乐赛--十二宫的挑衅
  2. Windows 10专业版 64位 版本15063-1703 对应的简体中文语言包(Chinese Language packs)
  3. 使用容器方式进行编译的经验和技巧小结
  4. 优思学院|初入职质量管理如何掌握工作内容?
  5. Android实时模糊
  6. 211130-Python谱图(Spectogram)分析Demo
  7. 将人民币中的阿拉伯数字转换为大写
  8. react native 震动 Vibration 使用详解
  9. 计算机网络技术和机电一体化,机电一体化技术和计算机网络技术那个好?
  10. 新交互英语外挂全自己主动版