2014-11-06 49 views
0

不完美的基準,但爲什麼Python的str.format比字符串連接

$python --version 
Python 3.4.2 
$ python -m timeit 'print("foo" + str(3.14) + "bar")' 
100000 loops, best of 3: 16.4 usec per loop 
$ python -m timeit 'print("foo{}bar".format(3.14))' 
100000 loops, best of 3: 19.2 usec per loop 
+2

'format()'比單純的字符串連接強大得多,所以我不認爲這個(如果它根本就是一個顯着的區別)是令人驚訝的。 – 2014-11-06 11:59:48

+2

你應該刪除'print'調用,這是沒有理由的。 – interjay 2014-11-06 12:01:54

+0

我在沒有''print''命令的i7筆記本電腦上多次運行這個程序。它們同樣快,每循環0.345次(+/- 0.004 usec)。包括打印命令與29.7 usec(+/- 0.1 usec)都沒有區別。在所有人都認爲性能存在差異之前,您可以使用多個測試的結果更新問題,而不需要使用打印命令。 – 2014-11-06 12:11:20

回答

5

你是對的速度越慢,一個使用format稍微慢。但誰在乎?你不會在性能關鍵的應用中做這種事情,對吧?

如果你想要一個可能的解釋,爲什麼format應該更慢,這是因爲它必須解析格式字符串。這比簡單地將一個數字轉換爲一個字符串並連接起來更復雜。我很驚訝,它們之間的差別很小。

+2

+1'誰在乎' – RvdK 2014-11-06 12:05:18

0

由於.format()正在做的額外工作。

.format()實際上並不是String類本身的工作,它來自於Formatter類,這就是爲什麼你看到額外的幾秒鐘,它將工作卸載到一個完成所有繁重工作的專門類。

相關問題