Что делает = (равно) в f-строках внутри фигурных скобок выражения? - PullRequest
6 голосов
/ 09 января 2020

Хорошо известно использование {} в Python f-строках для выполнения фрагментов кода и выдачи результата в формате 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=}')

Ответы [ 4 ]

7 голосов
/ 09 января 2020

На самом деле это совершенно новая функция с Python 3.8 .

Добавлен спецификатор = для f-строк. F-строка, такая как f'{expr=}', будет расширена до текста выражения, знака равенства, а затем представления вычисленного выражения.

По сути, это облегчает частый вариант использования print -отладка, так что, в то время как мы обычно должны написать:

f"some_var={some_var}"

, теперь мы можем написать:

f"{some_var=}"

Итак, в качестве демонстрации, используя новенький Python 3.8.0 REPL:

>>> print(f"{foo=}")
foo=42
>>>
1 голос
/ 09 января 2020

Это было введено в python 3.8. Это помогает уменьшить количество f'expr = {expr} при написании кодов. Вы можете проверить документы в Что нового в Python 3.8 .

Хороший пример показал Раймонд Хеттингер в его твите :

>>> 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
...

Вы также можете проверить этот , чтобы получить основную идею о том, почему это было предложено в первую очередь.

1 голос
/ 09 января 2020

Начиная с Python 3.8, f-строки поддерживают «самодокументированные выражения», в основном для устранения ошибок печати. Из документов :

Добавлен спецификатор = для f-строк. F-строка, такая как f '{expr =}', расширится до текста выражения, знака равенства, а затем представления вычисленного выражения. Например:

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
1 голос
/ 09 января 2020

Как уже упоминалось здесь :

В символах f теперь допускаются знаки равенства, начиная с Python 3.8. Это позволяет быстро оценить выражение при выводе выражения, которое было оценено. Это очень удобно для отладки. * Так что это фактически означает:

"something={executed something}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...