使用join拼接字符串
test = ["is","human","not","human"]
print(" ".join(test))
>>>is human not human
print(",".join(test))
>>>is,human,not,human
print("".join(test))
>>>ishumannothuman
使用+号进行拼接
a = "is human"
b = "not human"
print(a+" "+b)
>>>is human not human
使用格式化操作
a = "is human"
b = "not human"
print("%s %s" % (a,b))
>>>is human not human
print("{} {}".format(a,b))
>>>is human not human
但是在拼接字符串的时候最好不要使用+=,因为内存拷贝和垃圾收集产生的影响,会导致效率变低,比如
s = ""
a = ["1","2","3","4"]
for i in a:
s += i
上面的这种操作要比join 要慢上许多.
最好的方法是先收集所有要连接的部分,最后再一次将他们连接起来.比如
a = ["num:",1,2,3]
print("".join(str(i) for i in a)) # 不能直接join,因为python是强类型语言
>>>num:123
当字符串的拼接和I/O操作混合的时候需要做具体的分析,比如下面的两种方式
# version1
f.write(a+b)
# version2
f.write(a)
f.write(b)
当a,b两个字符串都很小的时候,那么第一个版本的代码能带来更好的性能.因为一次I/O操作的开销很高.
如果两个字符串都很大,那么第二个版本能带来更好的性能,因为这里避免了创建大的临时结果,也没有
对大内存块进行拷贝.所以使用哪一种情况需要做分析.
如果我们编写的代码要从许多短字符串中构建输出,则应该考虑编写生成器函数
def sample():
i = 0
while i < 10000:
yield "happy "
i += 1
text = " ".join(sample())
也可以将生成器和I/O操作智能化地结合起来
def combine(source,maxsize):
parts = []
size = 0
for part in source:
parts.append(part)
size += len(part)
if size > maxsize:
yield " ".join(parts)
parts = []
size = 0
yield " ".join(parts)
with open(filename,"w") as f:
for part in combine(sample,1000):
f.write(part)
网友评论