Всем известно, что в назначениях Python не возвращаются значения, предположительно, чтобы избежать присвоений в операторах if
, когда обычно используется только сравнение:
>>> if a = b:
File "<stdin>", line 1
if a = b:
^
SyntaxError: invalid syntax
>>> if a == b:
... pass
...
По той же причине можно было бы заподозрить, что несколько присваиваний в одном и том же операторе были также синтаксическими ошибками.
Фактически, a = (b = 2)
не является допустимым выражением:
>>> a = (b = 2)
File "<stdin>", line 1
a = (b = 2)
^
SyntaxError: invalid syntax
Итак, мой вопрос: почему a = b = 2
работает в Python, поскольку он работает на других языках, где присваивания имеют значение, например C?
>>> a = b = c = 2
>>> a, b, c
(2, 2, 2)
Является ли это поведение документированным? Я не мог найти ничего об этом в документации для операторов присваивания: http://docs.python.org/reference/simple_stmts.html#assignment-statements