Вы знаете, что такое генератор?Функция, которая может остановить свою обработку, чтобы она могла вернуть («yield») значение перед тем, как возобновить для получения следующего.
Хорошо, сопрограмма (хотя PEP использует термин «cofunction»)например, за исключением того, что ему никогда не нужно ничего приносить, и вместо этого он может перейти в другую сопрограмму («кокал» на языке PEP).Существует множество способов использования этой возможности, например, возможность создавать то, что по сути является вашей собственной облегченной утилитой для совместной работы с потоками (я видел несколько довольно аккуратных библиотек шаблонов, сделанных таким же образом), хотя это особенно полезно, когда вы можетепередача между функциями, вызываемыми из сопрограмм.
Обратите внимание, что ничего не требует сопрограмм.Вы всегда можете написать код по-другому и обойтись без них.Иногда это сделать намного сложнее (из-за необходимости более четкого управления состоянием).