【问题标题】:What does = (equal) do in f-strings inside the expression curly brackets?= (equal) 在表达式大括号内的 f 字符串中做什么?
【发布时间】:2020-04-26 22:28:38
【问题描述】:
众所周知,在 Python f-strings 中使用 {} 可以执行代码片段并以string 格式给出结果(一些教程这里)。但是,表达式末尾的 '=' 是什么意思?
log_file = open("log_aug_19.txt", "w")
console_error = '...stuff...' # the real code generates it with regex
log_file.write(f'{console_error=}')
【问题讨论】:
标签:
python
python-3.x
string
python-3.8
f-string
【解决方案1】:
这实际上是一个brand-new feature as of Python 3.8。
为 f 字符串添加了 = 说明符。一个 f 字符串,例如 f'{expr=}'
将扩展为表达式的文本,一个等号,然后
评估表达式的表示。
本质上,它促进了打印调试的频繁用例,因此,虽然我们通常必须编写:
f"some_var={some_var}"
我们现在可以写了:
f"{some_var=}"
因此,作为演示,使用全新的 Python 3.8.0 REPL:
>>> print(f"{foo=}")
foo=42
>>>
【解决方案2】:
从 Python 3.8 开始,f-strings 支持“自记录表达式”,主要用于打印调试。来自the docs:
为 f 字符串添加了一个 = 说明符。诸如 f'{expr=}' 这样的 f 字符串将
展开到表达式的文本,一个等号,然后
评估表达式的表示。例如:
user = 'eric_idle'
member_since = date(1975, 7, 31)
f'{user=} {member_since=}'
"user='eric_idle' member_since=datetime.date(1975, 7, 31)"
通常的 f 字符串格式说明符允许更多地控制
显示表达式的结果:
>>> delta = date.today() - member_since
>>> f'{user=!s} {delta.days=:,d}'
'user=eric_idle delta.days=16,075'
= 说明符将显示整个表达式,以便计算
可以显示:
>>> print(f'{theta=} {cos(radians(theta))=:.3f}')
theta=30 cos(radians(theta))=0.866
【解决方案3】:
这是在 python 3.8 中引入的。它有助于在编写代码时减少大量f'expr = {expr}。你可以在What's new in Python 3.8查看文档。
Raymond Hettinger 在他的tweet 中展示了一个很好的例子:
>>> from math import radians, sin
>>> for angle in range(360):
print(f'{angle=}\N{degree sign} {(theta:=radians(angle))=:.3f}')
angle=0° (theta:=radians(angle))=0.000
angle=1° (theta:=radians(angle))=0.017
angle=2° (theta:=radians(angle))=0.035
angle=3° (theta:=radians(angle))=0.052
angle=4° (theta:=radians(angle))=0.070
angle=5° (theta:=radians(angle))=0.087
angle=6° (theta:=radians(angle))=0.105
angle=7° (theta:=radians(angle))=0.122
angle=8° (theta:=radians(angle))=0.140
angle=9° (theta:=radians(angle))=0.157
angle=10° (theta:=radians(angle))=0.175
...
您还可以查看this 以了解最初提出此建议的原因。
【解决方案4】:
提到here:
从 Python 3.8 开始,现在允许在 f 字符串中使用等号。这使您可以在输出已评估的表达式时快速评估表达式。调试非常方便。:
这意味着它将运行 f-string 大括号中的代码的执行,并将结果用等号添加到末尾。
所以它实际上意味着:
"something={executed something}"