Разбор по шагам:
𝚍𝚎𝚏 𝚏():
𝚢𝚒𝚎𝚕𝚍 "𝚊"
𝚢𝚒𝚎𝚕𝚍 "𝚋"
𝚜 = ":".𝚓𝚘𝚒𝚗(𝚏()) — здесь берётся встроенный метод 𝚓𝚘𝚒𝚗, разделителем служит строка ":", а аргументом — генератор.
Генератор по очереди выдаёт "a", потом "b".
— «Собери все строки из генератора, вставь между ними разделитель»
— Результат — строка "a:b".
𝚙𝚛𝚒𝚗𝚝(𝚜) → 'a:b'
Почему это важно
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Что выведет код?
Anonymous Quiz
27%
[1, 2, 3] [4, 2, 3]
59%
[4, 2, 3] [4, 2, 3]
7%
[1, 2, 3] [1, 2, 3]
7%
Error
👍3
Python сначала вычисляет правую часть целиком: создаётся временный кортеж из текущих значений 𝚢 и 𝟺, то есть [𝟷, 𝟸, 𝟹] и 𝟺.
Только после этого начинается присваивание слева направо:
Но поскольку 𝚡 и 𝚢 указывают на один и тот же список, изменение 𝚢[𝟶] сразу видно и через 𝚡. В итоге список становится [𝟺, 𝟸, 𝟹], и обе переменные выводят его.
Эта задачка показывает важную особенность: порядок вычисления и присваивания в множественном присваивании может приводить к неочевидным результатам, когда левая и правая части «переплетены» через ссылки на изменяемые объекты.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👎1
Подробный разбор по шагам
Эта задача показывает, что генераторы поддерживают двустороннюю коммуникацию — паттерн, используемый в конвейерах обработки данных и state machines.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2