Я прочитал PEP 572 о выражениях присваивания, и я обнаружил, что этот код является наглядным примером, где я мог бы его использовать:
while line := fp.readline():
do_stuff(line)
Но я запутался, из-за чегоЯ прочитал, он должен работать так же, как обычное назначение, но вернуть значение.Но, похоже, это не работает так:
>>> w:=1
File "<stdin>", line 1
w:=1
^
SyntaxError: invalid syntax
Теперь, поработав с ним, я понял, что следующие работы:
>>> (w:=1)
1
Но это кажется таким непитонным.Это единственный оператор, который требует скобки:
>>> w = 1
>>> w + w
2
>>> w == w
True
>>> w is w
True
>>> w < w
False
Есть ли причина, по которой синтаксический анализатор обрабатывает его иначе, чем буквально что-либо еще в Python ...?Я чувствую, что что-то упустил.Это не просто оператор.
Было бы очень полезно использовать :=
в REPL для назначения переменных, поскольку значение будет отображаться.
(Обновление: я делаюне поощряйте дискуссию по этому деликатному вопросу. Пожалуйста, не оставляйте комментарии или ответы, кроме полезных.)