摘要:上面的程序有如下的輸出可以看到,的性能明顯好于。而在連接字符串的時(shí)候,會(huì)先計(jì)算需要多大的內(nèi)存存放結(jié)果,然后一次性申請(qǐng)所需內(nèi)存并將字符串復(fù)制過(guò)去,這是為什么的性能優(yōu)于的原因。所以在連接字符串?dāng)?shù)組的時(shí)候,我們應(yīng)考慮優(yōu)先使用。
本篇要講的是,連接字符串的時(shí)候可以用join也可以用+,但這兩者有沒(méi)有區(qū)別呢?
關(guān)注公眾號(hào):「Python專(zhuān)欄」,后臺(tái)回復(fù)「騰訊架構(gòu)資源1」,獲取由騰訊架構(gòu)師整理的大數(shù)據(jù)學(xué)習(xí)資源包全套!?。?/p>
我們先來(lái)看一下用join和+連接字符串的例子
str1 = " ".join(["hello", "world"]) str2 = "hello " + "world" print(str1) # 輸出 “hello world" print(str2) # 輸出 “hello world"
兩者的結(jié)果是一樣,那么考慮這樣一個(gè)問(wèn)題,這兩者在性能上有區(qū)別嗎?
我們來(lái)做個(gè)實(shí)驗(yàn),比較下join和+的性能
import timeit def test1(strlist): return "".join(strlist) def test2(strlist): result = "" for v in strlist: result = result+v return result if __name__ == "__main__": strlist = ["a very very very very very very very long string" for n in range(100000)] timer1 = timeit.Timer("test1(strlist)", "from __main__ import strlist, test1") timer2 = timeit.Timer("test2(strlist)", "from __main__ import strlist, test2") time1 = timer1.timeit(number=100) time2 = timer2.timeit(number=100) print("join: %f, plus: %f" % (time1, time2))
那么這里我們不對(duì)timeit模塊做過(guò)多解釋?zhuān)銈兛梢岳斫鉃槭且粋€(gè)對(duì)代碼效率進(jìn)行檢測(cè)運(yùn)行耗時(shí)的模塊。下次我們多帶帶起一篇來(lái)說(shuō)這個(gè)timeit。
上面的程序有如下的輸出
join: 0.116944, plus: 0.394379
可以看到,join的性能明顯好于+。這是為什么呢?
原因是這樣的,字符串是不可變對(duì)象,當(dāng)用操作符+連接字符串的時(shí)候,每執(zhí)行一次+都會(huì)申請(qǐng)一塊新的內(nèi)存,然后復(fù)制上一個(gè)+操作的結(jié)果和本次操作的右操作符到這塊內(nèi)存空間,因此用+連接字符串的時(shí)候會(huì)涉及好幾次內(nèi)存申請(qǐng)和復(fù)制。
而join在連接字符串的時(shí)候,會(huì)先計(jì)算需要多大的內(nèi)存存放結(jié)果,然后一次性申請(qǐng)所需內(nèi)存并將字符串復(fù)制過(guò)去,這是為什么join的性能優(yōu)于+的原因。
所以在連接字符串?dāng)?shù)組的時(shí)候,我們應(yīng)考慮優(yōu)先使用join。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43345.html
摘要:我的轉(zhuǎn)行經(jīng)歷博主從開(kāi)公眾號(hào)起前個(gè)月開(kāi)始接觸語(yǔ)言,然后接觸到了數(shù)據(jù)方面的技術(shù),包括爬蟲(chóng),數(shù)據(jù)分析,數(shù)據(jù)挖掘,機(jī)器學(xué)習(xí)等,一直到現(xiàn)在仍然在堅(jiān)持自學(xué),我相信只要堅(jiān)持結(jié)果總不會(huì)太差。對(duì)于數(shù)據(jù)分析而言,機(jī)器學(xué)習(xí)和爬蟲(chóng)等并不是必須,但是加分項(xiàng)。 作者:xiaoyu 微信公眾號(hào):Python數(shù)據(jù)科學(xué) 知乎:python數(shù)據(jù)分析師 showImg(https://segmentfault.com/i...
摘要:應(yīng)聘阿里是一個(gè)相對(duì)較長(zhǎng)的流程,涉及崗位選擇簡(jiǎn)歷投遞簡(jiǎn)歷評(píng)估技術(shù)面試面試背景調(diào)查入職材料準(zhǔn)備等環(huán)節(jié)。關(guān)于學(xué)歷和專(zhuān)業(yè)的要求目前,阿里的正式崗位對(duì)學(xué)歷的要求基本都是本科及以上,這個(gè)要求并不高,出發(fā)點(diǎn)是避免因?qū)W歷限制而錯(cuò)過(guò)優(yōu)秀的人才。 應(yīng)聘阿里是一個(gè)相對(duì)較長(zhǎng)的流程,涉及崗位選擇、簡(jiǎn)歷投遞、簡(jiǎn)歷評(píng)估、技術(shù)面試、HR面試、背景調(diào)查、入職材料準(zhǔn)備等環(huán)節(jié)。其中,關(guān)于技術(shù)面試,網(wǎng)上有很多優(yōu)秀的攻略,但普...
摘要:應(yīng)聘阿里是一個(gè)相對(duì)較長(zhǎng)的流程,涉及崗位選擇簡(jiǎn)歷投遞簡(jiǎn)歷評(píng)估技術(shù)面試面試背景調(diào)查入職材料準(zhǔn)備等環(huán)節(jié)。關(guān)于學(xué)歷和專(zhuān)業(yè)的要求目前,阿里的正式崗位對(duì)學(xué)歷的要求基本都是本科及以上,這個(gè)要求并不高,出發(fā)點(diǎn)是避免因?qū)W歷限制而錯(cuò)過(guò)優(yōu)秀的人才。 應(yīng)聘阿里是一個(gè)相對(duì)較長(zhǎng)的流程,涉及崗位選擇、簡(jiǎn)歷投遞、簡(jiǎn)歷評(píng)估、技術(shù)面試、HR面試、背景調(diào)查、入職材料準(zhǔn)備等環(huán)節(jié)。其中,關(guān)于技術(shù)面試,網(wǎng)上有很多優(yōu)秀的攻略,但普...
摘要:老王工作五六年了,今年剛從一家不小的公司出來(lái),公司效益不好,年底裁員了,不幸老王在年前的最后一次裁員名單中中獎(jiǎng)了。小黃心想,昨天復(fù)習(xí)了面試寶典里的數(shù)據(jù)庫(kù)索引,老師說(shuō)這個(gè)是要點(diǎn),面試官怎么不按常理出牌呢。 又到了一年金三銀四,回想到很多年前我剛參加工作時(shí)的面試經(jīng)歷,那時(shí)都是呆呆地等著面試官問(wèn)問(wèn)題,被問(wèn)到一些自己并不熟悉的問(wèn)題時(shí)要不就是思考半天也切不中要點(diǎn),要不就只能無(wú)奈地回答并不清楚了。...
閱讀 1975·2021-10-25 09:48
閱讀 2809·2021-09-22 14:59
閱讀 1767·2019-08-29 16:52
閱讀 874·2019-08-29 16:07
閱讀 2314·2019-08-29 12:38
閱讀 1781·2019-08-26 13:23
閱讀 889·2019-08-26 11:49
閱讀 3285·2019-08-26 10:56