参考链接: Python中的Timeit与示例

Python提供了一个timeit.timeit()函数用于计算函数的运行时间,这使得我们在项目开发中很方便的设计profiling并根据结果做相应的优化, 其定义如下:

timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000)

Create a Timer instance with the given statement, setup code and timer function and run its timeit() method with number executions.

New in version 2.6.

例如,假设我们在某个项目中要统计并存储访问过的url,一个可能的实现如下所示:

1 class UrlStatistics:

2     def __init__(self):

3         self.visitedSites = dict()

4

5     def visit(self, url):

6         if url in self.visitedSites:

7             self.visitedSites[url] += 1

8         else:

9             self.visitedSites[url] = 1

10

11     def mostFrequentVisitedSites(self, n=10):

12         sortedSites = sorted(self.visitedSites.items(),

13                              key=lambda pair: pair[1], reverse=True)

14         return [(url, visits) for url, visits in sortedSites[:n]]

上面示例代码中用一个dict变量存储所有访问过的url(line 2), 函数visit() 将每一个新访问的的url计入我们的统计当中(line5~9), 函数mostFrequentVisitedSites()返回访问最频繁的前十名url(line 11~14). 为了使用timeit.timeit()函数计算visit()或mostFrequentVisitedSites()执行效率,我们需要让该函数反复执行,因此我们还需要以某种方式来反复得到不同或相同的URL。 下面的get_url_name()函数随机从英文字母表选取3-7个字符并拼接成URL, test_visit()函数用于调用UrlStatistics.visit(), 最后我们用timeit.timeit()调用test_visit()函数并设定调用次数,最后得到运行时间:

1 def get_url_name():

2     prefix = 'www'

3     suffix = 'com'

4     name = ''.join([random.choice(string.ascii_lowercase)

5                        for i in range(random.randint(3, 7))])

6     return '.'.join([prefix, name, suffix])

7

8

9 def test_visit():

10     urlStats = UrlStatistics()

11     urlStats.visit(get_url_name())

12

13

14 if __name__ == '__main__':

15     print(timeit.timeit('test_visit()',

16                         setup='from __main__ import test_visit',

17                         number=600000))

结果如下:

stephenw@stephenw-devbox1:~/pyTest$ ./timeitTest.py

8.078887998002756

考虑到python中collections模块中的defaultdict可以让visit()函数看上去更简洁,我们可做如下修改:

class UrlStatistics:

def __init__(self):

self.visitedSites = defaultdict(int)

def visit(self, url):

self.visitedSites[url] += 1

相应的,由timeit.timeit()得到的运行时间为 8.326297112002067, 可见使用defaultdict()后,效率降低了

最后,timeit模块还提供了命令行接口来实现同样的功能(结果和上面略有差异):

stephenw@stephenw-devbox1:~/pyTest$  python -m timeit -n 600000 "from timeitTest import test_visit; test_visit()"

600000 loops, best of 3: 9.83 usec per loop

  

转载于:https://www.cnblogs.com/wangwenzhi2019/p/10892594.html

[转载] python计时函数timeit.timeit()使用小结相关推荐

  1. [转载] python iter( )函数

    参考链接: Python iter() python中的迭代器用起来非常灵巧,不仅可以迭代序列,也可以迭代表现出序列行为的对象,例如字典的键.一个文件的行,等等. 迭代器就是有一个next()方法的对 ...

  2. [转载] Python input()函数

    参考链接: Python input() 描述: Python input()函数用于接受一个标准输入数据 语法: input([prompt]) 参数介绍: prompt ---提示信息.需要注意的 ...

  3. [转载] Python ascii()函数

    参考链接: Python ascii() 描述: Python ascii()函数和repr() 函数有点类似,返回一个表示对象的字符串, 但是对于字符串中的非 ASCII 字符则返回通过 repr( ...

  4. [转载] python| map()函数应用详解

    参考链接: Python map函数 map()函数是 Python 内置的高阶函数,它接收一个函数 f 和一个list(或多个 list,但list个数与f函数的参数个数必须相等),并通过把函数 f ...

  5. python中可变参数args传入函数时储存的类型是_[转载]Python中函数的参数定义和可变参数*args与**args...

    Python中函数的参数定义和可变参数 *args与**args区别 刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和** ...

  6. [转载] Python|range函数用法完全解读

    参考链接: Python | range()不返回迭代器 迭代器是 23 种设计模式中最常用的一种(之一),在 Python 中随处可见它的身影,我们经常用到它,但是却不一定意识到它的存在.在关于迭代 ...

  7. python函数定义错误_[转载]python之函数的使用及异常处理2021.1.30

    2.1 定义函数 def 函数名(参数): 代码1 代码2 ...... 2.2 调⽤函数 函数名(参数) 注意: 1. 不同的需求,参数可有可⽆. 2. 在Python中,函数必须先定义后使⽤. 2 ...

  8. python总结函数图像_PIL使用小结(crop和paste函数)

    PIL(Python Imaging Library)是python语言中对图像处理方面的一个开源库,其主要功能模块为Image,对于Image模块,可以使用 from PIL import Imag ...

  9. [转载] python sum()函数和.sum(axis=0)函数的使用

    参考链接: Python sum() 参考: http://www.cnblogs.com/yyxayz/p/4033736.html http://www.pythontab.com/html/20 ...

最新文章

  1. 百度香港二次上市,12 岁开发者、AI 机器人同台敲响“芯片代码锣”
  2. OVS之vhost-net中VM通信(十)
  3. Apache专用笔记贴
  4. Tarjan的强联通分量
  5. 等式变换java解法
  6. 不支持模块化规范的插件可以使用import 导入的原因
  7. 在iphone开发中的get请求和post请求
  8. 自定义注解实现(spring aop)
  9. 发起http请求raw格式
  10. 多智能体强化学习入门
  11. javaweb基于内容的图片搜索(2)_java爬虫
  12. spring aop 执行顺序(@Before @Around @After @AfterReturning @AfterThrowing)
  13. 小数形式与科学计数法转换(简)
  14. 给定一个十进制数,将其转化为N进制数-----17年滴滴笔试题
  15. 硬纪元AI峰会实录|华捷艾米沈瑄:端加云才是AI和AR的未来
  16. python3爬虫——千库网
  17. Python自动化办公社区 · 最新教程
  18. AltiumDesigner下PCB设计学习帖(20181225-20220122)
  19. linux下的umask()函数,Linux----centos下的umask详解(翻译)
  20. Android 仿instagram登陆页面动画

热门文章

  1. SpringBoot→整合数据层、@Valid参数校验、事务propagation属性、动态SQL、AOP监控执行时间
  2. JavaScript文档对象模型DOM节点操作之复制节点(7)
  3. Japan树状数组求逆序数
  4. vsftpd pam_mysql_vsftpd+mysql+pam虚拟用户无法登录ftp服务器,请给位大侠帮忙!
  5. 安装PaddleOCR遇到ERROR: Command errored out with exit status 1:command: ‘f:\python3.7\python.exe‘ -u -c
  6. 计算机网络-IP数据报计算(IP数据报分片)一个数据报部分长度为3400字节(使用固定首部)。现在经过一个网络传输,该网络的MTU为800字节:
  7. OpenGL基础36:天空盒
  8. bzoj 4631: 踩气球(线段树)
  9. 块状树(bzoj 3720: Gty的妹子树)
  10. 安卓图片处理全解:获取视频的缩略图