欢迎讨论
文章目录
一、join和+操作符区别及原因
python编程拼接字符串,经常用join和+,它俩拼接字符串的结果是一样的,举个例子:
if __name__ == "__main__":
a = "hello"
b = "world"
print(a + b)
print("".join([a, b]))
但是: join连接效率 > 操作符+连接效率
举例:将999999个“atiaisi”拼接起来
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
def timer(func):
def func_wrapper(*args, **kwargs):
from time import time
start_time = time()
result = func(*args, **kwargs)
end_time = time()
spend_time = end_time - start_time
print(f"{func.__name__} cost time {spend_time}")
return result
return func_wrapper
@timer
def plus_test(str_list):
res = ""
for ele in str_list:
res = res + ele
@timer
def join_test(str_list):
res = ""
res = "".join(str_list)
# print(res)
if __name__ == "__main__":
str_list = ["atiaisi" for i in range(999999)]
plus_test(str_list)
join_test(str_list)
运行结果:
可以明显看出join执行速度比+快很多,效率提升了大概190倍。
原因:字符串是不可变的对象,就不在字符串本身做文章了,那就另外开辟空间。
+号在拼接字符串的时候,会先开辟一块空间,把+号左边的字符串和+号右边的字符串合起来放在新开辟的空间内,这样有几个+号,就会开辟几次空间。
join拼接字符串也需要开辟空间,但是会提前算好总共需要开辟多大的空间,一次性把内存申请好,然后把所有的字符串合起来放在这个新的空间中,这样就不用频繁申请空间了。节约空间又节约时间。
从上面的例子中,可以看到join比+少申请了一块a+b
的空间。
二、总结
1、优先使用join拼接字符串。数据量越大,效率差异越明显。
2、从内存消耗上来看,+操作符消耗的内存要比join消耗的内存大。多在中间临时生成的字符串对象占用的内存。