字串連線,就是將2個或以上的字串合併成一個,看上去連線字串是一個非常基礎的小問題,但是在Python中,我們可以用多種方式實現字串的連線,稍有不慎就有可能因為選擇不當而給程式帶來效能損失。
方法1:加號連線
很多語言都支援使用加號連線字串,Python也不例外,只需要簡單的將2個或多個字串相加就可以完成拼接。
a = `Python`
b = `私房菜`
r = a + b # 輸出`Python私房菜`
複製程式碼
方法2:使用%操作符
在Python 2.6以前,%操作符是唯一一種格式化字串的方法,它也可以用於連線字串。
a = `Python`
b = `私房菜`
r = `%s%s` % (a, b) # 輸出`Python私房菜`
複製程式碼
方法3:使用format方法
format方法是Python 2.6中出現的一種代替%操作符的字串格式化方法,同樣可以用來連線字串。
a = `Python`
b = `私房菜`
r = `{}{}`.format(a, b)
複製程式碼
方法4:使用f-string
Python 3.6中引入了Formatted String Literals(字面量格式化字串),簡稱f-string,f-string是%操作符和format方法的進化版,使用f-string連線字串的方法和使用%操作符、format方法類似。
a = `Python`
b = `私房菜`
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迴圈中。