Альтернативные варианты написания
В целом та же семантика, что и в текущем предложении, но пишется иначе.
EXPR as NAME
:
stuff = [[f(x) as y, x/y] for x in range(5)]
Поскольку EXPR as NAME
уже имеет значение в операторах import
, except
и with
(с другой семантикой), это может создать ненужныепутать или требовать специального регистра (например, чтобы запретить присваивание в заголовках этих операторов).
(Обратите внимание, что with EXPR as VAR
не просто присваивает значение EXPR
VAR
- он вызывает EXPR.__enter__()
и присваивает результат этого VAR
.)
Дополнительные причины предпочесть :=
над этим написанием:
В if f(x) as y
цель назначения не выпрыгиваету вас - он просто читается как if f x blah blah
и визуально он слишком похож на if
f(x) and y
.
Во всех других ситуациях, когда допускается предложение as
, даже читатели с навыками посредничества должны предвидетьэто предложение (однако необязательно) по ключевому слову that начинает строку, и грамматика связывает это ключевое слово с предложением as
:
import foo as bar
except Exc as var
with ctxmgr() as var
Наоборот, выражение присваивания не принадлежит к if
или while
, который запускаетline, и мы намеренно разрешаем выражения присваивания и в других контекстах.
Параллельная каденция между
NAME = EXPR
if NAME := EXPR
усиливает визуальное распознавание выражений присваивания.