python字符串拼接

使用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)

你可能感兴趣的:(python字符串拼接)