你所不知道的Python | 字元串連接的秘密

你所不知道的Python | 字元串連接的秘密

來自專欄 Python私房菜25 人贊了文章

字元串連接,就是將2個或以上的字元串合併成一個,看上去連接字元串是一個非常基礎的小問題,但是在Python中,我們可以用多種方式實現字元串的連接,稍有不慎就有可能因為選擇不當而給程序帶來性能損失。

方法1:加號連接

很多語言都支持使用加號連接字元串,Python也不例外,只需要簡單的將2個或多個字元串相加就可以完成拼接。

a = Pythonb = 私房菜r = a + b # 輸出Python私房菜

方法2:使用%操作符

在Python 2.6以前,%操作符是唯一一種格式化字元串的方法,它也可以用於連接字元串。

a = Pythonb = 私房菜r = %s%s % (a, b) # 輸出Python私房菜

方法3:使用format方法

format方法是Python 2.6中出現的一種代替%操作符的字元串格式化方法,同樣可以用來連接字元串。

a = Pythonb = 私房菜r = {}{}.format(a, b)

方法4:使用f-string

Python 3.6中引入了Formatted String Literals(字面量格式化字元串),簡稱f-string,f-string是%操作符和format方法的進化版,使用f-string連接字元串的方法和使用%操作符、format方法類似。

a = Pythonb = 私房菜r = f{a}{b}

方法5:使用str.join()方法

字元串有一個內置方法join,其參數是一個序列類型,例如數組或者元組等。

a = Python b = 私房菜r = .join([a, b])

對比測試

既然連接字元串有這麼多方法,那麼使用時到底選擇哪種呢?我們從代碼可讀性和性能兩個層面來評估一下上面5種方法。

使用timeit模塊,分別執行上述5種方法的示例代碼100000次,執行時間如圖。

可以看到,%操作符、format和f-string都是字元串格式化方法,性能依次遞增,加號連接的性能和f-string不相上下。

有一點需要注意的是,字元串類型是不可變的,所以每一次應用加號連接字元串都會生成一個新的字元串,連接多個字元串時,效率低下就是必然的了,我們將一次連接的字元串提升到10個和20個,再來進行2輪測試,下面是連接20個字元串時的耗時情況。

和連接兩個字元串時的結果出現了一些不同,首先使用加號連接的方式在字元串數量較多時(大於10個),性能會急劇下降,str.join()方法在連接大量字元串時性能最好。

總結

連接少量字元串時

使用加號連接符在性能和可讀性上都是明智的,如果對可讀性有更高的要求,並且使用的Python 3.6以上版本,f-string也是一個非常好的選擇,例如下面這種情況,f-string的可讀性顯然比加號連接好得多。

a = f姓名:{name} 年齡:{age} 性別:{gender}b = 姓名: + name + 年齡: + age + 性別: + gender

連接大量字元串時

joinf-string都是性能最好的選擇,選擇時依然取決於你使用的Python版本以及對可讀性的要求,f-string在連接大量字元串時可讀性並不一定好。切記不要使用加號連接,尤其是在for循環中。

歡迎關注我的公眾號【Python私房菜】

推薦閱讀:

用不到 50 行的 Python 代碼構建最小的區塊鏈
來自詞法分析的啟發——使用狀態機改寫控制結構
Scrapy爬蟲框架教程(四)-- 抓取AJAX非同步載入網頁

TAG:Python | 爬蟲計算機網路 | 編程 |