我应该使用 f 弦吗?

KTF*_*ash 5 python string python-3.x f-string

这两个print语句产生相同的结果,至少对我来说,第一个版本看起来更具可读性。

我是否应该坚持使用该f'版本,因为它会在以后给我带来问题,或者导致性能更差,或者不遵循当前的 Python 标准?或者这只是这些版本之一的一致使用问题?

print('My first bicycle was a ' + bicycles[1])
print(f'My first bicycle was a {bicycles[1]})')
Run Code Online (Sandbox Code Playgroud)

Vis*_*dev 4

来自PEP 498,一个致力于文字字符串插值的 PEP(Python 增强提案),

\n
\n

F 字符串提供了一种使用最少的语法将表达式嵌入字符串文字的方法。应该注意的是, f字符串实际上是运行时计算的表达式,而不是常量值。在 Python\n源代码中,f 字符串是一个文字字符串,前缀为 \xe2\x80\x98f\xe2\x80\x99,其中包含大括号内的表达式。表达式被\n它们的值替换。

\n
\n

这里的要点是突出显示的文本。这意味着它的评估效果要好得多,因为CPython编译器内部实现了AST(抽象语法树),这使得它们速度更快。

\n

另外,我认为它更具可读性,并且如果字符串中有更多变量,它可以提供更好的可读性。使用此语法可以轻松执行多行字符串插值。

\n

例如,

\n
f\'\'\'\n    My first bicycle was a {bicycles[0]}\n    It has color {bicycles[0]["color"]}\n    and has {bicycles[0]["gears"]} gears.\n\'\'\'\n
Run Code Online (Sandbox Code Playgroud)\n

  • 在底层,“f-string”处理分为括号内的值的评估以及它们与常量字符串组件的其余部分的放置。对于复杂的“f-string”,AST 在更快的评估中发挥着至关重要的作用。要查看 AST 是如何创建的,您可以使用 `ast` 库 `ast.dump(ast.parse('''f"Sum: {a + b}"'''))`。要更深入地了解“f-string”与“str.format()”与“%-formatting”的速度比较,您需要查看可以使用“dis”库生成的反汇编字节代码。@JW。 (2认同)