1. 程式人生 > >Python連接字符串用join還是+

Python連接字符串用join還是+

print 操作 過多 上一個 運行 結果 code rom 為什麽

我們先來看一下用join和+連接字符串的例子

str1 = " ".join(["hello", "world"])
str2 = "hello " + "world"
print(str1)  # 輸出 “hello world"
print(str2)  # 輸出 “hello world"

兩者的結果是一樣,那麽考慮這樣一個問題,這兩者在性能上有區別嗎?

我們來做個實驗,比較下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))

那麽這裏我們不對timeit模塊做過多解釋,你們可以理解為是一個對代碼效率進行檢測運行耗時的模塊。下次我們單獨起一篇來說這個timeit。

上面的程序有如下的輸出

join: 0.116944, plus: 0.394379

可以看到,join的性能明顯好於+。這是為什麽呢?

原因是這樣的,字符串是不可變對象,當用操作符+連接字符串的時候,每執行一次+都會申請一塊新的內存,然後復制上一個+操作的結果和本次操作的右操作符到這塊內存空間,因此用+連接字符串的時候會涉及好幾次內存申請和復制。

而join在連接字符串的時候,會先計算需要多大的內存存放結果,然後一次性申請所需內存並將字符串復制過去,這是為什麽join的性能優於+的原因。

所以在連接字符串數組的時候,我們應考慮優先使用join。

Python連接字符串用join還是+