f"{expr=}" 是一个新的 f 字符串表达式吗见训练大括号前的等号?从哪个版本的python?

问题描述

我收到了一个 python 笔记本,里面充满了像 f"{expr=}" 这样的表达式,这些表达式在我的环境中会产生错误消息:

var=7

print(f"{var=}")

  File "<fstring>",line 1
    (var=)
        ^
SyntaxError: invalid Syntax

我怀疑/期望它实际上可能是 f"expr={expr}" 的新语法,即如下面的打印语句:

print(f"var={var}")

var=7

事实上,我经常使用像后者这样的表达式进行调试,如果有一个简写就好了。

那是不是比我的(3.7.6)更高版本的python?还是对 fstring 模块的自定义 在网络上或在 SE 中搜索它并不高效。

如果它不是标准功能,我怎样才能让它工作?

解决方法

Answer - Python Version 3.8

f-strings 简化了很多地方,其中 str.format 和 % 样式格式。还有一个地方你想打印变量或表达式的值,并添加一些带有字符串的上下文,如变量名或一些任意名称,以便当你有很多语句时,你可以区分打印的值。所以使用变量名后跟值是打印样式调试更常见的格式。 块引用 这导致用户写 f"name = {name}" 并且在以下情况下会变得笨拙 变量名很长,就像filtered_data_from_third_party 一样 写成 f"filtered_data_from_third_party = {filtered_data_from_third_party}”。在这些情况下,我们采用更短的 我们在上下文中很容易理解的名称,例如 f"filtered data {filtered_data_from_third_pary}"。f-strings 也支持格式 说明符,所以你可以写 f"{name!r}" 这与 f"{repr(name)}"。

鉴于上述样板文件,一个想法已发布在 python-ideas 周围 一个格式说明符,您可以在其中使用它并且 f-string 将展开 就像一个宏变成 = 。最初!d 被选中,所以 f"{name!d}" 将扩展为 f"name={repr(name)}"。这 最初在 bpo36774 中实现。经过讨论 !d 被更改 使用 = 与来自 Guido 和其他核心开发人员的输入,因为可以 成为未来 !d 服务的用例并按字母顺序保留 格式字符串中的名称用于其他用途。所以这被改为使用 = as bpo36817 中此功能的符号。使用概述 如下所示,提供各种功能。

Read more here

,

此功能已在 Python issue 36817 中讨论并在 Python 3.8 中发布。