yield это не так волшебно, как предполагает этот ответ. Когда вы вызываете функцию, содержащую оператор yield в любом месте, вы получаете объект-генератор, но код не выполняется. Затем каждый раз, когда вы извлекаете объект из генератора, Python выполняет код в функции до тех пор, пока не дойдет до yield инструкции, затем делает паузу и доставляет объект. Когда вы извлекаете другой объект, Python возобновляется сразу после yield и продолжается до тех пор, пока не достигнет другого yield (часто того же самого, но на одну итерацию позже). Это продолжается до тех пор, пока функция не завершится, после чего генератор считается исчерпанным.
id: inms8g3z0tf20cdv