python越来越慢_为什么Python中的串联速度越来越慢?

为什么在某些情况下,Python 3中的连接似乎比Python 2中的连接慢?

影响最大的串联方法似乎是字节对象的连续串联,从O(n)到O(n?)操作.

我的分析代码大部分在这里:

#!/usr/bin/env python

from operator import concat

from sys import version, version_info

from timeit import timeit # Compatibility: ver >= 2.6

# ver = version.partition('

')[0].rstrip()

ver = '.'.join(str(v) for v in version_info[:3])

print(ver)

if version_info[0] == 2:

from StringIO import StringIO

else:

from io import StringIO

from functools import reduce

xrange = range

def build_plus():

output = ''

for _ in xrange(input_len):

output += 'a'

return output

def build_join():

return ''.join('a' for _ in xrange(input_len))

def build_bytes_plus():

output = b''

for _ in xrange(input_len):

output += b'a'

return output

def build_stringio():

output = StringIO()

for _ in xrange(input_len):

output.write('a')

return output.getvalue()

def build_reduce():

return reduce(concat, ('a' for _ in xrange(input_len)))

builds = {'str+': build_plus,

'join': build_join,

'reduce': build_reduce,

'bytes+': build_bytes_plus,

'StringIO': build_stringio}

if version_info[0] == 2:

import cStringIO

def build_cstringio():

output = cStringIO.StringIO()

for _ in xrange(input_len):

output.write('a')

return output.getvalue()

builds['cStringIO'] = build_cstringio

else:

from io import BytesIO

def build_bytesio():

output = BytesIO()

for _ in xrange(input_len):

output.write(b'a')

return output.getvalue()

builds['BytesIO'] = build_bytesio

resfile = open('times.csv', 'a')

size_range = 50 # Number of points over the size axis

min_order = 1.0 # 10^x byte input min

max_order = 5.0 # 10^x byte input max

for allow_gc in (False, True):

setup = 'gc.enable()' if allow_gc else 'pass'

for build_name, build_fun in builds.items():

# For a roughly constant confidence interval, aim for uniform sample density across the

# (logarithmic) input size axis.

for size_index in range(size_range+1):

input_len = int(10**((max_order-min_order)*size_index/size_range + min_order))

# Rather than repeating many measurements at one input size, perform one measurement

# per input size for a continuous range of input sizes and apply smoothing later.

dur = timeit(build_fun, setup, number=1)

resfile.write('"%s",%s,"%s",%d,%.6g

' % (ver, str(allow_gc).upper(), build_name,

input_len, dur))

我的R脚本中的一些图形如下所示:

rKfng.jpg

YiqkP.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jvm gc策略_IBM JVM调整– gencon GC策略

jvm gc策略本文将向您详细介绍从Java虚拟机(例如HotSpot或JRockit)迁移到IBM JVM时重要的Java堆空间调整注意事项。 此调整建议基于我为我的一个IT客户端执行的最新故障排除和调整任务。 IBM JVM概述 正如您可能从其他文章中看到的那样,IBM …

linux etc 服务启动脚本,linux 服务脚本启动问题

对于使用了 systemd 的系统,所有的 service 服务都会默认转为 systemd 服务之后再由 systemd 来执行,转换之后,你也可以直接使用 systemd 来执行了(它的用户工具就是你用的 systemctl),除非是一些非 service 标准的命令&#xff0…

芬兰高性能图表控件-免费试用并提供技术支持

图表控件对于很多技术研发人员、工程设计师来说肯定不陌生,但市面上已有的图表控件产品大多功能单一、性能也不稳定,很难满足不同人群在不同场合的使用需求。为此,专注于开发高性能和最先进的数据可视化工具公司Arction则给出了完美的解决方案…

linux open函数_Linux驱动开发 / 字符设备驱动内幕 (1)

哈喽,我是老吴,继续记录我的学习心得。一、保持专注的几个技巧将最重要的事放在早上做。待在无干扰环境下,比如图书馆。意识到刚坐下开始投入工作前,有点负面小情绪是特别正常的现象。让“开心一刻”成为计划的一部分。拥有合情合…

xftp 无法连接linux 22端口,解决Xshell不从22端口连接服务器

PL/SQL Developer主数据库连接和窗口连接切换Oracle开发者估计对PL/SQL Developer都非常熟悉了,里面有些小的功能点大概还有些初学者没发现.PL/SQL Developer支持多连接多窗口,下面详细说说. 主连接的概念 打开PL ...4 多表代替密码之Hill 密码 2实现该解密方法的KEY 不…

bzoj4484[JSOI2015]最小表示

题意 给出一张DAG,要求删除尽量多的边使得连通性不变.(即:若删边前u到v有路径,则删边后仍有路径).点数30000,边数100000. 分析 如果从u到v有(u,v)这条边,且从u到v只有这一条路径,那么这条边必须保留.否则这条边一定可以删除.因为如果有不止一条路径从u到v,必然存在点x(x!u,x!v)…

Enterprise Spring示例和集成测试

我的博客中的空白更长,因为我正在忙着写《 Pivotal认证的Spring企业集成专家考试–学习指南》 。 这本书是沉重的例子。 幸运的是,Apress同意开源所有这些示例。 因此, 在此GitHub存储库中有大量可用的Spring示例 。 总共146个带有集成测试的…

github删除文件_github 仓库中删除历史大文件

问题如果git中提交了大文件,而且保存到了版本库中,那在下载或者克隆git包的时候,速度会非常慢。再加上github在国内访问本来就很慢,可能会导致包无法下载(克隆)。为了提升下载(克隆)速度,可以永久的删除这些文件(包括该…

linux plc编程软件,基于Linux平台的可编程控制器软PLC设计

实例下面以一个简单的对3并口通道循环控制为例,说明软PLC 的工作流程。(1)梯形图编程。从软PLC 主界面进入后,启动梯形图编程,调用梯形图编程的主程序。梯形图编程共需要调用梯形图界面模块、关闭模块、IO 模块,这些均在配置文件中…

django的ModelForm

一、ModelForm 二、Ajax 原生 jQuery 伪Ajax操作 三、文件上传(预览) - Form提交(会刷新页面) - Ajax上传文件(推荐) 四、图片验证码(跟session配合) 五、CKEditor,UEEditor,TinyEdi…

insert into语句_入门MySQL——DML语句篇

前言:在上篇文章中,主要为大家介绍的是DDL语句的用法,可能细心的同学已经发现了。本篇文章将主要聚焦于DML语句,为大家讲解表数据相关操作。这里说明下DDL与DML语句的分类,可能有的同学还不太清楚。DDL(Data Definitio…

HBase shell 命令。

HBase shell 命令。 进入hbase shell console$HBASE_HOME/bin/hbase shell如果有kerberos认证,需要事先使用相应的keytab进行一下认证(使用kinit命令),认证成功之后再使用hbase shell进入可以使用whoami命令可查看当前用户 hbase(…

python常用库有哪些餐厅_Python常用库整理

前两天有个同学问我关于Tkinter库的问题,但是我连Tkinter库是干啥的都不清楚,有点尴尬。Python库博大精深,涉及各个领域,多了解一些著名的库总比不知道的好。GUI图形界面TkinterwxPythonPyGTKPyQtPySideWeb框架Djangoweb2pyflaskb…

减少Java垃圾收集开销的5条提示

保持较低的GC开销的一些最有用的技巧是什么? 随着Java 9的一次再次延迟发布,G1(“ Garbage First”)垃圾收集器将设置为HotSpot JVM的默认收集器。 从串行垃圾收集器一直到CMS收集器,JVM在其整个生命周期中都见证了许…

关于collectionview布局的坑

不知道写了多少次collectionview,步了很多坑,现在看来虽然达到了自己想要的结果,却不知道其中所以然。还是总结一下,免得再走弯路; 场景是这样的,我要定制一个显示选择图片的排列,想要实现横向排…

python可以用来编写计算机网络程序吗_计算机网络(基于python做的笔记 )

计算机网络(UDP 和 TCP)概述为了让在不同的电脑上运行的软件,之间能够互相传递数据,就需要借助网络的功能使用网络能够把多方链接在一起,然后可以进行数据传递所谓的网络编程就是,让在不同的电脑上的软件能够进行数据传递&#xf…

git冲突Please move or remove them before you can merge

解决Git冲突造成的Please move or remove them before you can merge git clean -d -fx ""其中x -----删除忽略文件已经对git来说不识别的文件d -----删除未被添加到git的路径中的文件f -----强制运行 转载于:https://www.cnblogs.com/wicub/p/6934597.html

linux不重启换root密码是什么原因,在Linux下修改和重置root密码的方法(超简单)

刚开始接触linux的人,忘记了root密码可能会不知所措。想找回自己的root密码,但是又不知道方法。其实,只需要简单的几步就可以重置自己的root密码了(找回密码我也不会)1.开机HcQBEm上敲击e,然后编辑选项2.在linux16这一行&#xff…

python命令行参数作用_Python命令行参数解析模块argparse

前言更多内容,请访问我的 个人博客。以前 optparse 比较火,但是在python2.7版本后,官方不再维护这个模块,转而大力支持 argparse 。argparse 模块可以让人轻松编写用户友好的命令行接口。她可以从 sys.argv 中解析出参数&#xff…

SCP-bzoj-1019

项目编号:bzoj-1019 项目等级:Safe 项目描述: 戳这里 特殊收容措施: 对于一个hanoi,知道了各种移动操作的优先级,也就确定了方案。可以证明对于盘子数为N的hanoi,任意移动方案都等价于将数目为N…