你所不知道的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
連接大量字元串時
join和f-string都是性能最好的選擇,選擇時依然取決於你使用的Python版本以及對可讀性的要求,f-string在連接大量字元串時可讀性並不一定好。切記不要使用加號連接,尤其是在for循環中。
歡迎關注我的公眾號【Python私房菜】
推薦閱讀:
※用不到 50 行的 Python 代碼構建最小的區塊鏈
※來自詞法分析的啟發——使用狀態機改寫控制結構
※Scrapy爬蟲框架教程(四)-- 抓取AJAX非同步載入網頁