网上很多文章人云亦云,字符串连接应该使用「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 中,字符串"连接"效率最高的方式是?一定出乎你的意料的更多相关文章

  1. python中字符串连接的四种方式

    以下实例展示了join()的使用方法 #!/usr/bin/python str = "-"; seq = ("a", "b", " ...

  2. python中字符串连接的三种方式

    1.字符串之间连接 'aa' 'bb' 可以中间为空格 或者什么都没有. 那么输出都是两者之间紧密相连. 2.字符串+数字 'aa' +90 这样会报错,因为不同类型不能相加, 可以用 'aa',90 ...

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

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

  4. python中字符串的四种表达方式

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

  5. Python中字符串拼接的三种方式

    在Python中,我们经常会遇到字符串的拼接问题,在这里我总结了三种字符串的拼接方式:     1.使用加号(+)号进行拼接 加号(+)号拼接是我第一次学习Python常用的方法,我们只需要把我们要加 ...

  6. python字符串连接的N种方式

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

  7. python字符串连接的N种方式总结

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

  8. 超详细!盘点Python中字符串的常用操作

    在Python中字符串的表达方式有四种 一对单引号 一对双引号 一对三个单引号 一对三个双引号 a = 'abc' b= "abc" c = '''abc''' d = " ...

  9. Python中字符串有哪些常用操作?纯干货超详细

随机推荐

  1. ubuntu 刚更改默认python3版本后更新包等

    一般来说ubuntu 刚更改为python3为默认版本后要进行一下更新包等等的内容(当然不更新一下也是可以的,最好更新一下,第一次更新较慢) 使用下面两行代码: sudo apt-get update ...

  2. ES6 完全使用手册

    前言 这里的 "ES6" 泛指 ES5 之后的新语法 这里的 "完全" 是指本文会不断更新 这里的 "使用" 是指本文会展示很多 ES6 的 ...

  3. HTML5抽奖转盘

    在线演示 本地下载

  4. golang解析json报错:invalid character '\x00' after top-level value

    golang解析json报错:invalid character '\x00' after top-level value 手动复制字符串:{"files":["c:/t ...

  5. securecrt重建

    CRT重建步骤: 重装系统或者重装CRT后,面临找回以前的session记录信息.记住下面的步骤,再也不担心丢session了! 1.备份关键文件(config文件夹)   (1)配置文件默认文件路径 ...

  6. SQuirrel-GUI工具安装手册-基于phoenix驱动

    背景描述: SQuirrel sql client 官方地址:http://www.squirrelsql.org/index.php?page=screenshots 一个图形界面的管理工具 安装手 ...

  7. 配置zabbix通过微信报警企业微信报警

    如今势态: 报警的方式可谓是八仙过海各显神通,如电话报警,短信报警,邮件报警,QQ报警,微信报警等等. 电话报警:一般都是使用别的平台的工具,平台给你提供一个接口供你使用,大多数为限量收费款 短信报警 ...

  8. 1001: [BeiJing2006]狼抓兔子

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 12827  Solved: 3044[Submit][ ...

  9. MySQL主备复制原理、实现及异常处理

    复制概述 MySQL支持三种复制方式:基于行(Row)的复制.基于语句(Statement)的复制和混合类型(Mixed)的复制. 基于语句的复制早在3.23版本中就存在,而基于行的复制方式在5.1版 ...

  10. NSwag在asp.net web api中的使用,基于Global.asax

    https://github.com/NSwag/NSwag/wiki/OwinGlobalAsax This page explains how to use the NSwag OWIN midd ...