圖源:unsplash 很多初學(xué)者都像我一樣,,最開始使用Python時(shí),會(huì)不自覺(jué)地使用“+”來(lái)連接字符串,,就像在許多其他編程語(yǔ)言(比如Java)中那樣,因?yàn)檫@樣既直觀又容易,。 但我很快意識(shí)到成熟的開發(fā)人員似乎更喜歡使用.join()來(lái)連接字符串,,而不是“+”。 你現(xiàn)在一定像我剛知道這一點(diǎn)時(shí)一樣困惑,。本文中,,我將告訴你這兩種方法之間的區(qū)別,以及為什么不應(yīng)該使用“+”,。 開始作為一名初學(xué)者,,或者剛從使用“+”連接字符串的其他編程語(yǔ)言切換過(guò)來(lái)的人,很順手地就會(huì)寫出這樣的代碼: str1 =“I love”str2 =“Python.” print(str1 + str2) 但時(shí)間久了,,你或許或許就會(huì)發(fā)現(xiàn),,別人都是這樣寫的:
實(shí)話說(shuō),,當(dāng)我第一次看到上述方法時(shí),,我認(rèn)為這既不直觀也不美觀。 連接多個(gè)字符串轉(zhuǎn)折發(fā)生在不久之后,,有一次我需要連接列表中的多個(gè)字符串,。 strs = ['Life','is',,'short',,'I','use',,'Python'] 最初,,我是這樣做的:
我必須編寫一個(gè)for循環(huán)來(lái)逐個(gè)連接字符串,。另外,結(jié)果字符串前需要?jiǎng)h除我在開頭添加的空格,,因?yàn)樗凶址夹枰谇懊嫣砑涌崭?,而不是單是開頭。 或許你有其他解決方案,,例如將索引添加到for循環(huán)中,,這樣就不應(yīng)將index=0處的字符串添加到此空格處。無(wú)論如何,,你仍然需要使用此for循環(huán)并為空格做些什么,。 圖源:unsplash 這時(shí),我回想起以前曾經(jīng)看過(guò).join()方法,,靈光乍現(xiàn),,也許這正是我需要使用它的時(shí)候! 超輕松解決了,!一行代碼可以完成所有工作,。由于.join()方法是由字符串對(duì)象調(diào)用的,該字符串對(duì)象將用于連接列表中的每個(gè)字符串,,因此你無(wú)需擔(dān)心開頭的空格,。 但這不是我們需要使用join()而不是“+”方法的唯一原因。 join()方法背后的邏輯讓我們來(lái)比較一下這兩種方法的性能,,使用Jupyter Notebook的魔術(shù)方法%timeit來(lái)對(duì)其進(jìn)行評(píng)估,。 上面顯示的性能基于10萬(wàn)條路徑,結(jié)果是非??尚徘绎@而易見(jiàn)的,。使用join()方法可能比使用“+”來(lái)連接列表中的字符串快4倍。 這是為什么呢,?看看我繪制的概念圖,,用于演示使用“+”連接字符串的方法: 使用“+”運(yùn)算符和for循環(huán)將字符串連接 這顯示了for循環(huán)和“+”運(yùn)算符的作用: 1. 對(duì)于每個(gè)循環(huán),都可以從列表中找到字符串 2.對(duì)于每個(gè)循環(huán),,執(zhí)行程序?qū)⑿枰暾?qǐng)兩次內(nèi)存地址,,一次用于空格,另一次用于字符串,。 3.Python執(zhí)行程序解釋表達(dá)式result + =''+s并為空格申請(qǐng)內(nèi)存地址,。 4.然后,執(zhí)行程序意識(shí)到空格需要與字符串連接,,因此它將為字符串s申請(qǐng)內(nèi)存地址,,這是第一個(gè)循環(huán)“l(fā)ife”。 5.其中還存在12次內(nèi)存分配,。 那么,,使用join()方法發(fā)生了什么,? 使用“ join()”方法將字符串連接到列表中 1.執(zhí)行程序?qū)⒂?jì)算列表中有多少個(gè)字符串。這里有6個(gè),。 2.這意味著用于連接列表的字符串需要重復(fù)6-1 =5次,。 3.這里總共需要11個(gè)內(nèi)存空間,因此所有的這些空間將被立即應(yīng)用并被預(yù)先分配,。 4.然后按順序排列字符串,,再返回結(jié)果頁(yè)面。 很明顯,,主要的區(qū)別在于內(nèi)存分配的次數(shù),,這就是提高性能的主要原因。想象一下,,使用join()方法將6個(gè)字符串連接在一起,,速度已經(jīng)快了4倍。如果我們連接了大量的字符串呢?它將發(fā)生更大的變化,! 在Python中連接字符串時(shí),,顯然,考慮到其性能,,join()方法是首選,。 圖源:unsplash 通常來(lái)說(shuō),學(xué)習(xí)一門編程語(yǔ)言需要很長(zhǎng)的時(shí)間,。但是初學(xué)者上手Python的時(shí)間相對(duì)較短,這是它的優(yōu)勢(shì)之一,。但我們不應(yīng)止步于此并滿足于現(xiàn)在可以使用Python所做的事情,。 畢竟,平凡和卓越之間的差距可能正來(lái)自于一些小細(xì)節(jié),。 |
|