Python 中,字符串"连接"效率最高的方式是?一定出乎你的意料
网上很多文章人云亦云,字符串连接应该使用「join」方法而不要用「+」操作。说前者效率更高,它以更少的代价创建新字符串,如果用「+」连接多个字符串,每连接一次,就要为字符串分配一次内存,效率显得有点低,这样的解释听起来很有道理,但 Cpython 解释器是不是真的按照我们说的这样呢?
今天做了一个试验,结果可能会出乎你的意料。
defjoin(n):
s = "".join((str(i) fori inrange(n)))
defformat(n):
( "{}"* n).format(*(i fori inrange(n)))
defplus(n):
s = ""
fori inrange(n):
s += str(i)
上面 3 个函数分别表示用「join」和「format」还有「+」操作来连接字符串,从 0 到 n,总共 n 个数字连接起来构成一个新的字符串,形如:1234567891011……n。
下面是测试脚本:

每组取了15个样本数据,分别用 1,2,4,8,… 8192 个数字相连接,得到的统计数据可以看出,在数据量非常少的时候,三者效率几乎没什么差异,当少于20个字符串连接时,用「+」效率甚至更高,不过,随着字符串的个数增多,「join」方法发挥出来效果了,而用「+」越来越慢。这点无论是 python2 还是 python3 基本上是一样的。

python2.7.10

python3.6.0
所以结论是:如果连接的字符串很少,只有几个或者十几个,完全可以通过「+」来连接,毕竟这种方式更直白,而超过一定个数之后,则应该采用「join」方法,只有在操作大数据的时候,两者的对比才明显。
通过现象看本质才能做到知其然并知其所以然。Cpython 编译器内部其实针对字符串做了非常多的优化工作。在下篇文章准备专门写一写字符串工作原理的文章,这里先买个瓜子,预知后事如何,请关注「Python之禅」
最后,做任何事我们都不能仅凭三言两语就听信于人,而应该带着质疑的精神去探索这个世界。(有感于最近一程序员因求职被卷入传销组织遇难)
Python 中,字符串"连接"效率最高的方式是?一定出乎你的意料的更多相关文章
- python中字符串连接的四种方式
以下实例展示了join()的使用方法 #!/usr/bin/python str = "-"; seq = ("a", "b", " ...
- python中字符串连接的三种方式
1.字符串之间连接 'aa' 'bb' 可以中间为空格 或者什么都没有. 那么输出都是两者之间紧密相连. 2.字符串+数字 'aa' +90 这样会报错,因为不同类型不能相加, 可以用 'aa',90 ...
- python中字符串的几种表达方式(用什么方式表示字符串)
说明: 今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达,表示方式. python的几种表达方式 1 使用单引号扩起来字符串 ...
- python中字符串的四种表达方式
今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达,表示方式. python的几种表达方式 1 使用单引号扩起来字符串 > ...
- Python中字符串拼接的三种方式
在Python中,我们经常会遇到字符串的拼接问题,在这里我总结了三种字符串的拼接方式: 1.使用加号(+)号进行拼接 加号(+)号拼接是我第一次学习Python常用的方法,我们只需要把我们要加 ...
- python字符串连接的N种方式
python中有很多字符串连接方式,今天在写代码,顺便总结一下: 最原始的字符串连接方式:str1 + str2 python 新字符串连接语法:str1, str2 奇怪的字符串方式:str1 st ...
- python字符串连接的N种方式总结
python中有很多字符串连接方式,今天在写代码,顺便总结一下: 最原始的字符串连接方式:str1 + str2python 新字符串连接语法:str1, str2奇怪的字符串方式:str1 str2 ...
- 超详细!盘点Python中字符串的常用操作
在Python中字符串的表达方式有四种 一对单引号 一对双引号 一对三个单引号 一对三个双引号 a = 'abc' b= "abc" c = '''abc''' d = " ...
- Python中字符串有哪些常用操作?纯干货超详细
随机推荐
- 《Maven实战》第6章 仓库
6.1什么是Maven仓库? Maven仓库:存储所有Maven项目共享的构件的统一位置. Maven仓库的作用:Maven项目仅需声明依赖坐标,即可在需要的时候自动根据坐标找到仓库中的构件. 6.2 ...
- iOS开发进阶 - 日志输出框架CocoaLumberjack与XcodeColors插件的简单使用(swift版)
CocoaLumberjack是Mac和iOS上一个集快捷.简单.强大和灵活于一身的日志框架.XcodeColors是用于控制台着色的工具,配合着CocoaLumberjack用有更好的效果,不废话, ...
- CodeIgniter 资料
PHP 论坛: http://codeigniter.org.cn/forums/forum-opensource-1.html 下载 CodeIgniter 项目 的最新软件包(http://www ...
- Linux 查看进程基本命令
https://www.cnblogs.com/zwgblog/p/5971455.html https://www.cnblogs.com/lcword/p/6046261.html https:/ ...
- Java实现的一个小说采集程序
被标题吸引进来的不要骂我. 只是一个简单的实现,随手写了来下载一部喜欢的小说的.示例中的小说只是示例,不是我的菜. 使用了jsoup.挺好用的一个工具. 有需要的话,参考下自己改吧.挺简单的,是吧. ...
- TextView两种显示link的方法
TextView两种显示link的方法 一.简介 也是TextView显示文本控件两种方法 也是显示丰富的文本 二.方法 TextView两种显示link的方法 1)通过TextView里面的类ht ...
- Ajax基础(二)--获取服务器文件
获取服务器文件相关步骤: 1.创建文件: 2.创建XMLHttpRequest对象: 3.获取文件(注意事项:1)在服务器中运行测试:2)注意编码问题,编码要统一). 3.1 获取xml文件: HTM ...
- Device Drivers Should Not Do Power Management
有人对现有的电源管理提出了意见,认为驱动程序不应该做电源管理,paper地址在这里: http://www.ruf.rice.edu/~mobile/publications/xu2014apsys. ...
- 关于微软C#中的CHART图表控件的简单使用
最近公司项目要用到Chart图表控件,这是一个比较老的东西了,目前网络上似乎已经不太流行这个控件,但是只要配置了相关的属性,效果还是可以的.前前后后摸索了好久,接下来谈谈这个件控件最重要的几个属性. ...
- 实验二. 使用LoadRunner进行压力测试
实验二. 使用LoadRunner进行压力测试 一. LoadRunner 概要介绍 1.1简介 LoadRunner 是一种预测系统行为和性能的工业标准级负载测试工具.通过以模拟上千万用户实 ...