Понимание множественного назначения Python - PullRequest
1 голос
/ 05 октября 2019

Рассмотрим пример этого оператора присваивания:

>>> x, y = x[y] = {}, None
>>> x
{None: ({...}, None)}
>>> y
>>>

Какое значение присваивается x и как работает это присваивание?

1 Ответ

2 голосов
/ 05 октября 2019

Оператор присваивает значение в дальнем правом углу каждой цели слева, начиная с в слева. Таким образом, это эквивалентно

t = {}, None
x, y = t
x[y] = t

Итак, t начинается как кортеж, состоящий из пустого dict и значения None.

Далее мы распаковываем t и присвойте каждую часть x, а y: x связан с пустым dict, а y связан с None.

Наконец, мы можем назначить кортеждо x[y], так как мы только что определили x и y. Ключ None добавляется к dict, на который ссылается x, и его значением является исходный кортеж. Таким образом, мы заставили x[y] обращаться к самому x: цикл!

Python может обнаружить этот цикл, поэтому он показывает dict как {...}, вместо того, чтобы пытаться бесконечно расширять егодо {None: ({None: ({None: ....

...