字符串連接,就是將2個(gè)或以上的字符串合并成一個(gè)搏恤,看上去連接字符串是一個(gè)非澄ナ伲基礎(chǔ)的小問題,但是在Python中熟空,我們可以用多種方式實(shí)現(xiàn)字符串的連接藤巢,稍有不慎就有可能因?yàn)檫x擇不當(dāng)而給程序帶來性能損失。
方法1:加號(hào)連接
很多語言都支持使用加號(hào)連接字符串息罗,Python也不例外掂咒,只需要簡(jiǎn)單的將2個(gè)或多個(gè)字符串相加就可以完成拼接。
方法2:使用%操作符
在Python 2.6以前迈喉,%操作符是唯一一種格式化字符串的方法绍刮,它也可以用于連接字符串。
方法3:使用format方法
format方法是Python 2.6中出現(xiàn)的一種代替%操作符的字符串格式化方法挨摸,同樣可以用來連接字符串孩革。
方法4:使用f-string
Python 3.6中引入了Formatted String Literals(字面量格式化字符串),簡(jiǎn)稱f-string得运,f-string是%操作符和format方法的進(jìn)化版膝蜈,使用f-string連接字符串的方法和使用%操作符、format方法類似熔掺。
方法5:使用str.join()方法
字符串有一個(gè)內(nèi)置方法join饱搏,其參數(shù)是一個(gè)序列類型,例如數(shù)組或者元組等置逻。
對(duì)比測(cè)試
既然連接字符串有這么多方法推沸,那么使用時(shí)到底選擇哪種呢?我們從代碼可讀性和性能兩個(gè)層面來評(píng)估一下上面5種方法诽偷。
使用timeit模塊坤学,分別執(zhí)行上述5種方法的示例代碼100000次,執(zhí)行時(shí)間如圖报慕。
可以看到深浮,%操作符、format和f-string都是字符串格式化方法眠冈,性能依次遞增飞苇,加號(hào)連接的性能和f-string不相上下。
有一點(diǎn)需要注意的是蜗顽,字符串類型是不可變的布卡,所以每一次應(yīng)用加號(hào)連接字符串都會(huì)生成一個(gè)新的字符串,連接多個(gè)字符串時(shí)雇盖,效率低下就是必然的了忿等,我們將一次連接的字符串提升到10個(gè)和20個(gè),再來進(jìn)行2輪測(cè)試崔挖,下面是連接20個(gè)字符串時(shí)的耗時(shí)情況贸街。
和連接兩個(gè)字符串時(shí)的結(jié)果出現(xiàn)了一些不同,首先使用加號(hào)連接的方式在字符串?dāng)?shù)量較多時(shí)(大于10個(gè))狸相,性能會(huì)急劇下降薛匪,str.join()方法在連接大量字符串時(shí)性能最好。
總結(jié)
連接少量字符串時(shí)
使用加號(hào)連接符在性能和可讀性上都是明智的脓鹃,如果對(duì)可讀性有更高的要求逸尖,并且使用的Python 3.6以上版本,f-string也是一個(gè)非常好的選擇瘸右,例如下面這種情況娇跟,f-string的可讀性顯然比加號(hào)連接好得多。
連接大量字符串時(shí)
join和f-string都是性能最好的選擇尊浓,選擇時(shí)依然取決于你使用的Python版本以及對(duì)可讀性的要求逞频,f-string在連接大量字符串時(shí)可讀性并不一定好。切記不要使用加號(hào)連接栋齿,尤其是在for循環(huán)中苗胀。