我从 Python Github 存储库下载了 Python 3.6 alpha 版本,并且我最喜欢的新功能之一是字面字符串格式化。它可以像这样使用:
>>> x = 2
>>> f"x is {x}"
"x is 2"
这似乎与在str
实例上使用format
函数做的事情相同。然而,我注意到这种字面字符串格式化与仅调用format
相比实际上非常慢。下面是每种方法的timeit
的结果:
>>> x = 2
>>> timeit.timeit(lambda: f"X is {x}")
0.8658502227130764
>>> timeit.timeit(lambda: "X is {}".format(x))
0.5500578542015617
如果我将一个字符串作为timeit
的参数使用,我的结果仍然显示相同的模式:>>> timeit.timeit('x = 2; f"X is {x}"')
0.5786435347381484
>>> timeit.timeit('x = 2; "X is {}".format(x)')
0.4145195760771685
正如你所看到的,使用 format
几乎花费了一半的时间。我本来预计字面方法会更快,因为涉及的语法更少。是什么导致了在幕后运行的使得字面方法如此之慢?
x
在传递给format
方法时被分配到了一个局部变量有关,但是在f"..."
语法中必须在globals
中找到它。 - user2390182str.format()
在运行时解析插槽。 - Martijn Pieters.format
更快,那么这些字符串应该简单地编译成对.format
的调用。 - Alex Hall