相关疑难解决方法(0)

为什么Python 3.6 alpha中的文字格式化字符串如此之慢?(现在固定在3.6稳定)

我从Python Github存储库下载了一个Python 3.6 alpha版本,我最喜欢的一个新功能是文字字符串格式化.它可以像这样使用:

>>> x = 2
>>> f"x is {x}"
"x is 2"
Run Code Online (Sandbox Code Playgroud)

这似乎与formatstr实例上使用该函数做同样的事情.但是,我注意到的一件事是,与仅调用相比,这种文字字符串格式化实际上非常慢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几乎占用了一半的时间.我希望文字方法更快,因为涉及的语法更少.幕后发生了什么导致文字方法如此慢?

python performance python-internals python-3.6 f-string

32
推荐指数
2
解决办法
3447
查看次数

为什么join()不会自动将其参数转换为字符串?你什么时候不想让它们成为弦乐?

我们有一个清单:

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)

为什么不自动将收到的列表自动转换为字符串?

你何时不需要它将它们转换成字符串?是否有一些我丢失的小边缘情况?

python string-concatenation

8
推荐指数
1
解决办法
706
查看次数