你所不知道的Python | 字串連線的祕密

simpleapples發表於2019-03-04

字串連線,就是將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次,執行時間如圖。

你所不知道的Python | 字串連線的祕密

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

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

你所不知道的Python | 字串連線的祕密

和連線兩個字串時的結果出現了一些不同,首先使用加號連線的方式在字串數量較多時(大於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私房菜】

你所不知道的Python | 字串連線的祕密

相關文章