使用 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)
来源: http://www.jianshu.com/p/cd09327de337