2014-11-06 25 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类,这就是为什么你看到额外的几秒钟,它将工作卸载到一个完成所有繁重工作的专门类。

相关问题