自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

初學(xué)者都在坑里!不要在Python中使用“+”來(lái)連接字符串

開發(fā) 后端
成熟的開發(fā)人員似乎更喜歡使用.join()來(lái)連接字符串,而不是“+”。本文中,我將告訴你這兩種方法之間的區(qū)別,以及為什么不應(yīng)該使用“+”。

本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)

很多初學(xué)者都像我一樣,最開始使用Python時(shí),會(huì)不自覺(jué)地使用“+”來(lái)連接字符串,就像在許多其他編程語(yǔ)言(比如Java)中那樣,因?yàn)檫@樣既直觀又容易。

但我很快意識(shí)到成熟的開發(fā)人員似乎更喜歡使用.join()來(lái)連接字符串,而不是“+”。

你現(xiàn)在一定像我剛知道這一點(diǎn)時(shí)一樣困惑。本文中,我將告訴你這兩種方法之間的區(qū)別,以及為什么不應(yīng)該使用“+”。

[[328857]]

開始

作為一名初學(xué)者,或者剛從使用“+”連接字符串的其他編程語(yǔ)言切換過(guò)來(lái)的人,很順手地就會(huì)寫出這樣的代碼:

  1. str1 =“I love” 
  2. str2 =“Python.” print(str1 + str2) 

初學(xué)者都在坑里!不要在Python中使用“+”來(lái)連接字符串

但時(shí)間久了,你或許或許就會(huì)發(fā)現(xiàn),別人都是這樣寫的:

  1. str1 =“I love” 
  2. str2 =“Python.” print(''.join([str1,str2])) 
初學(xué)者都在坑里!不要在Python中使用“+”來(lái)連接字符串

實(shí)話說(shuō),當(dāng)我第一次看到上述方法時(shí),我認(rèn)為這既不直觀也不美觀。

連接多個(gè)字符串

轉(zhuǎn)折發(fā)生在不久之后,有一次我需要連接列表中的多個(gè)字符串。

  1. strs = ['Life','is','short','I','use','Python'] 

最初,我是這樣做的:

  1. strs = ['Life', 'is', 'short,','I', 'use', 'Python']def join_strs(strs): 
  2.     result = '' 
  3.     for s in strs: 
  4.         result += ' ' + s 
  5.     return result[1:]join_strs(strs) 
初學(xué)者都在坑里!不要在Python中使用“+”來(lái)連接字符串

我必須編寫一個(gè)for循環(huán)來(lái)逐個(gè)連接字符串。另外,結(jié)果字符串前需要?jiǎng)h除我在開頭添加的空格,因?yàn)樗凶址夹枰谇懊嫣砑涌崭瘢皇菃问情_頭。

或許你有其他解決方案,例如將索引添加到for循環(huán)中,這樣就不應(yīng)將index=0處的字符串添加到此空格處。無(wú)論如何,你仍然需要使用此for循環(huán)并為空格做些什么。

這時(shí),我回想起以前曾經(jīng)看過(guò).join()方法,靈光乍現(xiàn),也許這正是我需要使用它的時(shí)候!

初學(xué)者都在坑里!不要在Python中使用“+”來(lái)連接字符串

超輕松解決了!一行代碼可以完成所有工作。由于.join()方法是由字符串對(duì)象調(diào)用的,該字符串對(duì)象將用于連接列表中的每個(gè)字符串,因此你無(wú)需擔(dān)心開頭的空格。

但這不是我們需要使用join()而不是“+”方法的唯一原因。

join()方法背后的邏輯

讓我們來(lái)比較一下這兩種方法的性能,使用Jupyter Notebook的魔術(shù)方法%timeit來(lái)對(duì)其進(jìn)行評(píng)估。

初學(xué)者都在坑里!不要在Python中使用“+”來(lái)連接字符串

上面顯示的性能基于10萬(wàn)條路徑,結(jié)果是非??尚徘绎@而易見的。使用join()方法可能比使用“+”來(lái)連接列表中的字符串快4倍。

這是為什么呢?看看我繪制的概念圖,用于演示使用“+”連接字符串的方法:

 

初學(xué)者都在坑里!不要在Python中使用“+”來(lái)連接字符串

 

 

使用“+”運(yùn)算符和for循環(huán)將字符串連接

 

這顯示了for循環(huán)和“+”運(yùn)算符的作用:

  • 對(duì)于每個(gè)循環(huán),都可以從列表中找到字符串
  • 對(duì)于每個(gè)循環(huán),執(zhí)行程序?qū)⑿枰暾?qǐng)兩次內(nèi)存地址,一次用于空格,另一次用于字符串。
  • Python執(zhí)行程序解釋表達(dá)式result + =''+s并為空格申請(qǐng)內(nèi)存地址。
  • 然后,執(zhí)行程序意識(shí)到空格需要與字符串連接,因此它將為字符串s申請(qǐng)內(nèi)存地址,這是第一個(gè)循環(huán)“life”。
  • 其中還存在12次內(nèi)存分配。

那么,使用join()方法發(fā)生了什么?

 

初學(xué)者都在坑里!不要在Python中使用“+”來(lái)連接字符串

 

 

使用“ join()”方法將字符串連接到列表中

 

  • 執(zhí)行程序?qū)⒂?jì)算列表中有多少個(gè)字符串。這里有6個(gè)。
  • 這意味著用于連接列表的字符串需要重復(fù)6-1 =5次。
  • 這里總共需要11個(gè)內(nèi)存空間,因此所有的這些空間將被立即應(yīng)用并被預(yù)先分配。
  • 然后按順序排列字符串,再返回結(jié)果頁(yè)面。

很明顯,主要的區(qū)別在于內(nèi)存分配的次數(shù),這就是提高性能的主要原因。想象一下,使用join()方法將6個(gè)字符串連接在一起,速度已經(jīng)快了4倍。如果我們連接了大量的字符串呢?它將發(fā)生更大的變化!

在Python中連接字符串時(shí),顯然,考慮到其性能,join()方法是首選。

通常來(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é)。

 

責(zé)任編輯:趙寧寧 來(lái)源: 讀芯術(shù)
相關(guān)推薦

2015-03-23 17:18:18

Java字符串問(wèn)題

2022-12-08 12:05:03

Bash字符串

2022-12-02 14:30:24

Bash腳本數(shù)組

2022-12-14 10:08:00

BashLinux

2012-03-14 10:56:23

web app

2011-04-12 10:13:24

2010-03-10 17:09:26

Python語(yǔ)言

2011-09-16 09:38:19

Emacs

2022-04-24 15:21:01

MarkdownHTML

2011-06-21 10:44:31

const

2021-03-07 00:56:05

區(qū)塊鏈Python安全

2009-11-18 09:30:43

2011-05-18 11:01:39

Oracle

2021-05-10 08:50:32

網(wǎng)絡(luò)管理網(wǎng)絡(luò)網(wǎng)絡(luò)性能

2022-03-28 09:52:42

JavaScript語(yǔ)言

2023-07-28 07:31:52

JavaScriptasyncawait

2023-07-03 15:05:07

預(yù)測(cè)分析大數(shù)據(jù)

2020-08-04 08:42:10

Python開發(fā)工具

2010-06-13 11:13:38

UML初學(xué)者指南

2022-07-22 13:14:57

TypeScript指南
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)