Python内置类型性能分析过程实例


Posted in Python onJanuary 29, 2020

这篇文章主要介绍了Python内置类型性能分析过程实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

timeit模块

timeit模块可以用来测试一小段Python代码的执行速度。

Timer是测量小段代码执行速度的类。

class timeit.Timer(stmt='pass', setup='pass', timer=<timer function>)

  • stmt参数是要测试的代码语句(statment);
  • setup参数是运行代码时需要的设置;
  • timer参数是一个定时器函数,与平台有关。

Timer对象.timeit(number=1000000)

Timer类中测试语句执行速度的对象方法。number参数是测试代码时的测试次数,默认为1000000次。方法返回执行代码的平均耗时,一个float类型的秒数。

list的操作测试

# -*- coding:utf-8 -*-

import timeit

def t2():
  li = []
  for i in range(10000):
    li.insert(0, i)

def t0():
  li = []
  for i in range(10000):
    li.extend([i])

def t1():
  li = []
  for i in range(10000):
    li.append(i)

def t3():
  li = []
  for i in range(10000):
    li += [i]

def t3_1():
  li = []
  for i in range(10000):
    li = li + [i]

def t4():
  li = [ i for i in range(10000)]

def t5():
  li = list(range(10000))


timer2 = timeit.Timer(stmt="t2()", setup="from __main__ import t2")
print("insert", timer2.timeit(number=1000), "seconds")

timer0 = timeit.Timer(stmt="t0()", setup="from __main__ import t0")
print("extend", timer0.timeit(number=1000), "seconds")

timer1 = timeit.Timer(stmt="t1()", setup="from __main__ import t1")
print("append", timer1.timeit(number=1000), "seconds")

timer3 = timeit.Timer(stmt="t3()", setup="from __main__ import t3")
print("+=", timer3.timeit(number=1000), "seconds")

timer3_1 = timeit.Timer(stmt="t3_1()", setup="from __main__ import t3_1")
print("+加法", timer3_1.timeit(number=1000), "seconds")

timer4 = timeit.Timer(stmt="t4()", setup="from __main__ import t4")
print("[i for i in range()]", timer4.timeit(number=1000), "seconds")

timer5 = timeit.Timer(stmt="t5()", setup="from __main__ import t5")
print("list", timer5.timeit(number=1000), "seconds")
执行结果:

insert 18.678989517 seconds
extend 1.022223395000001 seconds
append 0.6755100029999994 seconds
+= 0.773258104 seconds
+加法 126.929554195 seconds
[i for i in range()] 0.36483252799999377 seconds
list 0.19607099800001038 seconds

pop操作测试

x = range(2000000)
pop_zero = Timer("x.pop(0)","from __main__ import x")
print("pop_zero ",pop_zero.timeit(number=1000), "seconds")

x = range(2000000)
pop_end = Timer("x.pop()","from __main__ import x")
print("pop_end ",pop_end.timeit(number=1000), "seconds")

# ('pop_zero ', 1.9101738929748535, 'seconds')
# ('pop_end ', 0.00023603439331054688, 'seconds')

测试pop操作:从结果可以看出,"pop最后一个元素"的效率远远高于"pop第一个元素"

可以自行尝试下list的append(value)和insert(0,value),即一个后面插入和一个前面插入???

list内置操作的时间复杂度

Python内置类型性能分析过程实例

dict内置操作的时间复杂度

Python内置类型性能分析过程实例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Linux下多个Python版本安装教程
Aug 15 Python
对python 自定义协议的方法详解
Feb 13 Python
python使用参数对嵌套字典进行取值的方法
Apr 26 Python
django框架模板语言使用方法详解
Jul 18 Python
Python集合操作方法详解
Feb 09 Python
pycharm中import呈现灰色原因的解决方法
Mar 04 Python
Django模板标签中url使用详解(url跳转到指定页面)
Mar 19 Python
django执行数据库查询之后实现返回的结果集转json
Mar 31 Python
使用OpenCV去除面积较小的连通域
Jul 05 Python
Python定时任务框架APScheduler原理及常用代码
Oct 05 Python
浅谈Python项目的服务器部署
Apr 25 Python
Python利用zhdate模块实现农历日期处理
Mar 31 Python
python add_argument()用法解析
Jan 29 #Python
python使用ctypes调用扩展模块的实例方法
Jan 28 #Python
Python 时间戳之获取整点凌晨时间戳的操作方法
Jan 28 #Python
使用Python制作新型冠状病毒实时疫情图
Jan 28 #Python
代码总结Python2 和 Python3 字符串的区别
Jan 28 #Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
Jan 25 #Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
Jan 25 #Python
You might like
PHP中计算字符串相似度的函数代码
2012/12/29 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
2014/08/22 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
AlertBox 弹出层信息提示框效果实现步骤
2010/10/11 Javascript
js特殊字符过滤的示例代码
2014/03/05 Javascript
js判断鼠标左、中、右键哪个被点击的方法
2015/01/27 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
angular2 组件之间通过service互相传递的实例
2018/09/30 Javascript
vuex如何重置所有state(可定制)
2019/01/17 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python 面向对象 成员的访问约束
2008/12/23 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
django数据关系一对多、多对多模型、自关联的建立
2019/07/24 Python
PyCharm第一次安装及使用教程
2020/01/08 Python
python爬虫判断招聘信息是否存在的实例代码
2020/11/20 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
用css3实现当鼠标移进去时当前亮其他变灰效果
2014/04/08 HTML / CSS
美国温暖商店:The Warming Store
2018/12/15 全球购物
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
大学四年规划书范文
2013/12/27 职场文书
早餐连锁店计划书
2014/01/08 职场文书
会议邀请函范文
2014/01/09 职场文书
规划编制实施方案
2014/03/15 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
Vue深入理解插槽slot的使用
2022/08/05 Vue.js