f"{expr=}" 是一个新的 f 字符串表达式吗(请参阅训练大括号之前的等号)?从哪个版本的 python 开始?

lur*_*x66 4 python debugging f-string

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

var=7

print(f"{var=}")

  File "<fstring>", line 1
    (var=)
        ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

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

print(f"var={var}")

var=7
Run Code Online (Sandbox Code Playgroud)

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

那是比我的(3.7.6)更高版本的Python吗?还是fstring模块的定制? 在网络或 SE 中搜索它并没有什么成效。

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

EXO*_*DIA 8

答案 - Python 版本 3.8

\n
\n

f-strings 简化了很多 str.format 和 % 样式格式化的地方。还有一个地方您想要打印变量或表达式的值,并添加一些带有字符串的上下文,例如变量名称或某个任意名称,以便当您有许多语句时,您可以区分打印的值。因此,使用变量名称后跟值是打印样式调试的更常见格式。\n块引用\n这会导致用户编写 f"name = {name}",并且当\n变量名称很长(例如filtered_data_from_third_party 将被写为 f)时,可能会变得笨拙\n “filtered_data_from_third_party =\n{filtered_data_from_third_party}”。在这些情况下,我们会使用更短的\n名称,以便在上下文中轻松理解,例如“过滤数据\n{filtered_data_from_third_pary}”。f 字符串还支持格式说明符,因此您可以编写与 f"{repr(name)}" 相同的 f"{name!r}"。

\n

鉴于上面的样板文件,在 python-ideas 中围绕格式说明符发布了一个想法,您可以在其中使用它,并且 f 字符串将像宏一样扩展为 <variable_name> = <value_of_variable>。最初选择 !d\n,以便 f"{name!d}" 将扩展为 f"name={repr(name)}"。这最初是在 bpo36774 中实现的。经过讨论,!d 被更改为使用 = 并结合 Guido 和其他核心开发人员的输入,因为将来可能会有 !d 提供的用例,并在格式字符串中保留字母名称以供其他用途。因此,这已更改为使用 = 作为 bpo36817 中此功能的表示法。它\xe2\x80\x99 的使用概述如下,其中包含各种可用功能。

\n
\n

在这里阅读更多内容

\n