您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“為什么不在Python中使用+來連接字符串”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“為什么不在Python中使用+來連接字符串”吧!
開始
作為一名初學者,或者剛從使用“+”連接字符串的其他編程語言切換過來的人,很順手地就會寫出這樣的代碼:
str1 =“I love” str2 =“Python.” print(str1 + str2)
但時間久了,你或許或許就會發(fā)現(xiàn),別人都是這樣寫的:
str1 =“I love” str2 =“Python.” print(''.join([str1,str2]))
實話說,當我第一次看到上述方法時,我認為這既不直觀也不美觀。
連接多個字符串
轉(zhuǎn)折發(fā)生在不久之后,有一次我需要連接列表中的多個字符串。
strs = ['Life','is','short','I','use','Python']
最初,我是這樣做的:
strs = ['Life', 'is', 'short,','I', 'use', 'Python']def join_strs(strs): result = '' for s in strs: result += ' ' + s return result[1:]join_strs(strs)
我必須編寫一個for循環(huán)來逐個連接字符串。另外,結(jié)果字符串前需要刪除我在開頭添加的空格,因為所有字符串都需要在前面添加空格,而不是單是開頭。
或許你有其他解決方案,例如將索引添加到for循環(huán)中,這樣就不應將index=0處的字符串添加到此空格處。無論如何,你仍然需要使用此for循環(huán)并為空格做些什么。
這時,我回想起以前曾經(jīng)看過.join()方法,靈光乍現(xiàn),也許這正是我需要使用它的時候!
超輕松解決了!一行代碼可以完成所有工作。由于.join()方法是由字符串對象調(diào)用的,該字符串對象將用于連接列表中的每個字符串,因此你無需擔心開頭的空格。
但這不是我們需要使用join()而不是“+”方法的唯一原因。
join()方法背后的邏輯
讓我們來比較一下這兩種方法的性能,使用Jupyter Notebook的魔術(shù)方法%timeit來對其進行評估。
上面顯示的性能基于10萬條路徑,結(jié)果是非??尚徘绎@而易見的。使用join()方法可能比使用“+”來連接列表中的字符串快4倍。
這是為什么呢?看看我繪制的概念圖,用于演示使用“+”連接字符串的方法:
這顯示了for循環(huán)和“+”運算符的作用:
對于每個循環(huán),都可以從列表中找到字符串
對于每個循環(huán),執(zhí)行程序?qū)⑿枰暾垉纱蝺?nèi)存地址,一次用于空格,另一次用于字符串。
Python執(zhí)行程序解釋表達式result + =''+s并為空格申請內(nèi)存地址。
然后,執(zhí)行程序意識到空格需要與字符串連接,因此它將為字符串s申請內(nèi)存地址,這是第一個循環(huán)“l(fā)ife”。
其中還存在12次內(nèi)存分配。
那么,使用join()方法發(fā)生了什么?
執(zhí)行程序?qū)⒂嬎懔斜碇杏卸嗌賯€字符串。這里有6個。
這意味著用于連接列表的字符串需要重復6-1 =5次。
這里總共需要11個內(nèi)存空間,因此所有的這些空間將被立即應用并被預先分配。
然后按順序排列字符串,再返回結(jié)果頁面。
很明顯,主要的區(qū)別在于內(nèi)存分配的次數(shù),這就是提高性能的主要原因。想象一下,使用join()方法將6個字符串連接在一起,速度已經(jīng)快了4倍。如果我們連接了大量的字符串呢?它將發(fā)生更大的變化!
在Python中連接字符串時,顯然,考慮到其性能,join()方法是首選。
通常來說,學習一門編程語言需要很長的時間。但是初學者上手Python的時間相對較短,這是它的優(yōu)勢之一。但我們不應止步于此并滿足于現(xiàn)在可以使用Python所做的事情。
到此,相信大家對“為什么不在Python中使用+來連接字符串”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。