你所不知道的Python | 字符串鏈接的祕密

字符串鏈接,就是將2個或以上的字符串合併成一個,看上去鏈接字符串是一個很是基礎的小問題,可是在Python中,咱們能夠用多種方式實現字符串的鏈接,稍有不慎就有可能由於選擇不當而給程序帶來性能損失。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方法相似。spa

a = 'Python'
b = '私房菜'
r = f'{a}{b}'

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

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

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

對比測試

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

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

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

有一點須要注意的是,字符串類型是不可變的,因此每一次應用加號鏈接字符串都會生成一個新的字符串,鏈接多個字符串時,效率低下就是必然的了,咱們將一次鏈接的字符串提高到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私房菜】

相關文章
相關標籤/搜索