«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как цепные задания работают в Python? Действительно ли они эквивалентны множеству последовательных заданий?

Как цепные задания работают в Python? Действительно ли они эквивалентны множеству последовательных заданий?

Опубликовано 8 ноября 2024 г.
Просматривать:295

How do chained assignments work in Python? Are they truly equivalent to multiple sequential assignments?

Понимание цепочки присваиваний в Python

Сцепленные присваивания в Python, иллюстрируемые такими выражениями, как «x = y = somefunction()», вызвали интерес дискуссии относительно их эквивалентности множественным последовательным присваиваниям («x = somefunction(); y = somefunction()»). Чтобы прояснить этот вопрос, давайте подробно рассмотрим работу цепных присвоений.

В цепном присваивании сначала назначается самая левая цель. Следовательно, «x = y = somefunction()» эквивалентно:

temp = somefunction()
x = temp
y = temp

Этот порядок имеет решающее значение, поскольку цель слева получает значение временной переменной «temp» до того, как оно будет присвоено цели справа. Это очевидно при дизассемблировании связанной функции присваивания:

>>> def chained_assignment():
...     x = y = some_function()
...
>>> import dis
>>> dis.dis(chained_assignment)
  2           0 LOAD_GLOBAL              0 (some_function)
              3 CALL_FUNCTION            0
              6 DUP_TOP
              7 STORE_FAST               0 (x)
             10 STORE_FAST               1 (y)
             13 LOAD_CONST               0 (None)
             16 RETURN_VALUE

Обратите внимание, что значение, возвращаемое функцией, сначала сохраняется в «x», а затем в «y».

Это понимание имеет решающее значение для понимания поведения связанных присваиваний. Например, следует избегать таких выражений, как «x = y = []», поскольку и «x», и «y» будут относиться к одному и тому же списку. Вместо этого отдавайте предпочтение отдельным назначениям, например «x = []» и «y = []», чтобы создавать отдельные списки.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3