我从Python Github存储库下载了一个Python 3.6 alpha版本,我最喜欢的一个新功能是文字字符串格式化.它可以像这样使用:
>>> x = 2
>>> f"x is {x}"
"x is 2"
Run Code Online (Sandbox Code Playgroud)
这似乎与format在str实例上使用该函数做同样的事情.但是,我注意到的一件事是,与仅调用相比,这种文字字符串格式化实际上非常慢format.以下是timeit关于每种方法的内容:
>>> x = 2
>>> timeit.timeit(lambda: f"X is {x}")
0.8658502227130764
>>> timeit.timeit(lambda: "X is {}".format(x))
0.5500578542015617
Run Code Online (Sandbox Code Playgroud)
如果我使用字符串作为timeit参数,我的结果仍然显示模式:
>>> timeit.timeit('x = 2; f"X is {x}"')
0.5786435347381484
>>> timeit.timeit('x = 2; "X is {}".format(x)')
0.4145195760771685
Run Code Online (Sandbox Code Playgroud)
如您所见,使用format几乎占用了一半的时间.我希望文字方法更快,因为涉及的语法更少.幕后发生了什么导致文字方法如此慢?
我们有一个清单:
myList = [1, "two"]
Run Code Online (Sandbox Code Playgroud)
并希望打印出来,通常我会使用类似的东西:
"{0} and {1}".format(*myList)
Run Code Online (Sandbox Code Playgroud)
但你也可以这样做:
" and ".join(myList)
Run Code Online (Sandbox Code Playgroud)
但不幸的是:
>>> " and ".join(myList)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
Run Code Online (Sandbox Code Playgroud)
为什么不自动将收到的列表自动转换为字符串?
你何时不需要它将它们转换成字符串?是否有一些我丢失的小边缘情况?