【问题标题】:Should I use f-strings? [duplicate]初学者问题:我应该使用 f 弦吗? [复制]
【发布时间】:2020-06-26 01:27:26
【问题描述】:

美好的一天,

我对 Python 很陌生,所以我有一个问题。 这 2 幅印刷品产生了相同的结果,并且至少 对我而言第一个版本看起来更具可读性。 我应该坚持使用 f' 版本,因为它会在以后给我带来问题/性能更差/今天的 python 标准/...? 还是仅仅是这些版本之一的一致使用问题?

print('My first bycicle was a '+ bicycles[1])
print(f'My first bicycle was a {bicycles[1]})')

【问题讨论】:

  • 我认为print("My first bycicle was a{}".format(bicycles[1])) 看起来更具可读性。
  • 如果需要格式化,应该使用%-formatting、str.format或f-string。第一个版本对这种情况没有帮助。关于性能,f-string 要快得多。
  • f-strings 更易读、更快,并允许在占位符中计算表达式。绝对是最好的方法。
  • 例如,f'{a:.3f}' 不能(简单地)由+ 连接来执行。

标签: python python-3.x string f-string


【解决方案1】:

来自PEP498,一个专门用于文字字符串插值的 PEP(Python 增强提案),

F-strings 提供了一种在字符串文字中嵌入表达式的方法, 使用最小的语法。 需要注意的是,f-string 是真的 在运行时计算的表达式,而不是常数值。在 Python 中 在源代码中,f-string 是一个文字字符串,以‘f’为前缀,它 包含大括号内的表达式。表达式替换为 他们的价值观。

这里的重点是突出显示的文本,这意味着由于 CPython 编译器对 AST(抽象语法树)的内部实现,这使得评估速度更快。

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

例如:

f'''
    My first bicycle was a {bicycles[0]}
    It has color {bicycles[0]["color"]}
    and has {bicycles[0]["gears"]} gears.
'''

【讨论】:

  • 我不明白引用的文本如何支持您的陈述“由于 CPython 编译器对 AST(抽象语法树)的内部实现,它在评估中更好,这使得它们更快。”其实这句话我完全看不懂,怀疑是不是真的。
  • 在底层,f-string 处理分为括号内的值的评估以及它们与其余常量字符串组件的位置。对于复杂的f-string,AST 在更快的评估中起着至关重要的作用。要查看 AST 是如何创建的,您可以使用 astast.dump(ast.parse('''f"Sum: {a + b}"'''))。要深入了解f-stringstr.format()%-formatting 的速度比较,您需要查看可以使用dis 库生成的反汇编字节码。 @JW。
猜你喜欢
  • 2021-09-03
  • 2016-01-31
  • 1970-01-01
  • 2011-08-25
  • 2011-02-13
  • 1970-01-01
  • 2020-01-04
  • 2020-11-23
  • 2015-03-16
相关资源
最近更新 更多