Python札记4:连接字符串使用join还是+号
Posted xietx1995
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python札记4:连接字符串使用join还是+号相关的知识,希望对你有一定的参考价值。
你应该知道,连接字符串既可以用join
函数,也可以用+
号:
a = "hello " + "world"
b = " ".join(["hello", "world"])
print(a) # hello world
print(b) # hello world
两种方法的输出是相同的,那么它们的性能有什么区别呢?我们来做个试验:
import timeit
def concat1(strlist):
return "".join(strlist)
def concat2(strlist):
result = ""
for s in strlist:
result += s
return result
if __name__ == "__main__":
strlist = ["a very long string" for n in range(100000)]
timer1 = timeit.Timer("concat1(strlist)", "from __main__ import strlist, concat1")
timer2 = timeit.Timer("concat2(strlist)", "from __main__ import strlist, concat2")
t1 = timer1.timeit(number=100)
t2 = timer2.timeit(number=100)
print("join: :.2f, plus: :.2f".format(t1, t2)) # 输出 join: 0.18, plus: 2.00
我们用timeit模块对两个函数进行了测试,可以看到,join
函数的速度约为使用+
号运算符的11倍(不同设备上的结果可能不同)。原因如下:
使用+号时,如果有两个字符串拼接,则创建一块新的内存,然后将拼接后的结果拷贝到新内存块中,接着继续拼接余下的字符串,又会进行同样的操作,假如拼接100次,那么就会进行100次内存分配操作;同时,过程中还会伴随不停地销毁不再需要的字符串,所以是非常耗时的。如下图所示:
使用join函数时,首先会计算所有要拼接字符串的总长度,然后一次性分配所有内存;接着将所有字符串全部拼接起来,放入该内存块中。如下图所示:
所以,在连接字符串时,优先考虑使用join
函数。
我的知乎:奔三的鑫鑫
欢迎关注微信公众号:小鑫的代码日常
欢迎加入Python学习交流群:532232743,这里有各路高手等着你~
以上是关于Python札记4:连接字符串使用join还是+号的主要内容,如果未能解决你的问题,请参考以下文章