共计 1063 个字符,预计需要花费 3 分钟才能阅读完成。
本篇要讲的是,连接字符串的时候可以用 join 也可以用 +,但这两者有没有区别呢?关注公众号:「Python 专栏」,后台回复「腾讯架构资源 1」,获取由腾讯架构师整理的大数据学习资源包全套!!!
我们先来看一下用 join 和 + 连接字符串的例子
str1 = ” “.join([“hello”, “world”])
str2 = “hello ” + “world”
print(str1) # 输出“hello world”
print(str2) # 输出“hello world”
两者的结果是一样,那么考虑这样一个问题,这两者在性能上有区别吗?我们来做个实验,比较下 join 和 + 的性能
import timeit
def test1(strlist):
return “”.join(strlist)
def test2(strlist):
result = “”
for v in strlist:
result = result+v
return result
if __name__ == “__main__”:
strlist = [“a very very very very very very very long string” for n in range(100000)]
timer1 = timeit.Timer(“test1(strlist)”, “from __main__ import strlist, test1”)
timer2 = timeit.Timer(“test2(strlist)”, “from __main__ import strlist, test2”)
time1 = timer1.timeit(number=100)
time2 = timer2.timeit(number=100)
print(“join: %f, plus: %f” % (time1, time2))
那么这里我们不对 timeit 模块做过多解释,你们可以理解为是一个对代码效率进行检测运行耗时的模块。下次我们单独起一篇来说这个 timeit。
上面的程序有如下的输出
join: 0.116944, plus: 0.394379
可以看到,join 的性能明显好于 +。这是为什么呢?
原因是这样的,字符串是不可变对象,当用操作符 + 连接字符串的时候,每执行一次 + 都会申请一块新的内存,然后复制上一个 + 操作的结果和本次操作的右操作符到这块内存空间,因此用 + 连接字符串的时候会涉及好几次内存申请和复制。
而 join 在连接字符串的时候,会先计算需要多大的内存存放结果,然后一次性申请所需内存并将字符串复制过去,这是为什么 join 的性能优于 + 的原因。
所以在连接字符串数组的时候,我们应考虑优先使用 join。