网上很多文章人云亦云,字符串连接应该使用「join」方法而不要用「+」操作。说前者效率更高,它以更少的代价创建新字符串,如果用「+」连接多个字符串,每连接一次,就要为字符串分配一次内存,效率显得有点低,这样的解释听起来很有道理,但 Cpython 解释器是不是真的按照我们说的这样呢?

今天做了一个试验,结果可能会出乎你的意料。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,
互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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 中,字符串连接效率最高的方式是?一定出乎你的意料相关推荐

  1. python中字符串的几种表达方式(用什么方式表示字符串)

    今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达,表示方式. python的几种表达方式 1 使用单引号扩起来字符串 > ...

  2. python字符串字面量有哪四种定义方式_python中字符串连接的四种方式

    原博文 2018-12-05 14:28 − 以下实例展示了join()的使用方法 #!/usr/bin/python str = "-"; seq = ("a" ...

  3. JAVA中字符串连接效率的测试(续)

    原:http://www.54xue.com/w/39/n-10839.html 分别测试了n=10,100,500,1000,5000,10000,20000的时候,三个对象连接字符串所花费的时间, ...

  4. python中如何连接两个字符串_python字符串连接的N种方式总结

    python中有很多字符串连接方式,今天在写代码,顺便总结一下: 最原始的字符串连接方式:str1 + str2 python 新字符串连接语法:str1, str2 奇怪的字符串方式:str1 st ...

  5. python中连接符_python字符串连接的几种方式总结

    本篇文章给大家分享的内容是关于python字符串连接的几种方式总结,有需要的朋友参考一下 python中有很多字符串连接方式,今天在写代码,顺便总结一下,从最原始的字符串连接方式到字符串列表连接,大家 ...

  6. python编程字符输入连接_python字符串连接的N种方式总结

    python中有很多字符串连接方式,今天在写代码,顺便总结一下: 最原始的字符串连接方式:str1 + str2 python 新字符串连接语法:str1, str2 奇怪的字符串方式:str1 st ...

  7. python字符串怎么表示_python中字符串的几种表达方式(用什么方式表示字符串)...

    原博文 2018-11-21 18:45 − 说明: 今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达,表示方式. pytho ...

  8. JavaScript中字符串连接/拼接的四种方式

    JavaScript中连接字符串的方式有4种,分别是使用加号运算符连接.使用${}配合反引号连接.使用concat()函数连接.使用join()函数连接. 1. 使用加号运算符 示例代码如下: let ...

  9. python中字符串

    目录 1.字符串 2.什么叫字符串驻留机制呢? 3.驻留机制的几种情况(交互模式) 4.sys中的intern方法强制2个字符串指向同一个对象 5.PyCharm对字符串进行了优化处理(所以上述两个例 ...

最新文章

  1. 在ASP.NET Web API中使用OData的Action和Function
  2. 把java 工程转为 maven 工程
  3. 有关表格边框的css样式表语法说明
  4. boost::math模块使用 non_finite_num facet 的一个非常简单的例子
  5. 信号量、互斥体和自旋锁
  6. C#中POST数据和接收的几种方式
  7. haproxy keepalived_Haproxy+KeepAlived+Mycat实现高可用集群
  8. java图片资源存放_Java编程中图片文件放哪
  9. 8 WM配置-主数据-定义门(Dock Door)
  10. 团队DevOps实践之一
  11. BZOJ——3343: 教主的魔法 || 洛谷—— P2801 教主的魔法
  12. n 的第 k 个因子
  13. python如何执行代码_在Python中重新运行代码块
  14. 西门子编程使用的OB块解释
  15. 怎么制作GIF高清动态表情包
  16. 我要偷偷的学Python,然后惊呆所有人(第一天)
  17. python调用rarfile进行解压rar压缩包时,报了如下错误
  18. c语言面试(c语言面试基础知识)
  19. 刘彬20000词汇06
  20. org.springframework.dao.InvalidDataAccessApiUsageException: ERR wrong number of arguments for ‘srem‘

热门文章

  1. Cordova实战培训
  2. 白话经典算法系列之六 高速排序 高速搞定
  3. RABBITMQ 管理指南(添加虚拟HOST)
  4. DataStage8.7连接远程Oracle数据库
  5. GNS3 串口连接问题
  6. 老公,等儿子长大,我去天堂找你(推荐)
  7. 【温故知新】CSS学习笔记(背景)
  8. PP模块入门考试试题,看看能得多少分吧!
  9. FBL3N增加表字段
  10. 浅谈SAP CRM开发——基本业务概念