Что такое функция и как она будет работать в Python? - PullRequest
12 голосов
/ 26 февраля 2011

Я читаю PEP-3153 , но я не понимаю, в чем проблема, которую он хочет решить. Не могли бы вы объяснить?

Ответы [ 3 ]

6 голосов
/ 26 февраля 2011

Вы можете Google "сопрограммы Python" и получить много полезной информации. Вот презентация (PDF), с которой я столкнулся некоторое время назад, и которая мне показалась довольно хорошей по поводу того, как и почему.Исходный код также доступен (включая PDF, поэтому, если вы хотите и то, и другое, просто скачайте это).Домашняя страница для этой презентации содержит ссылки на отдельные исходные файлы.

3 голосов
/ 26 февраля 2011

Вы знаете, что такое генератор?Функция, которая может остановить свою обработку, чтобы она могла вернуть («yield») значение перед тем, как возобновить для получения следующего.

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

Обратите внимание, что ничего не требует сопрограмм.Вы всегда можете написать код по-другому и обойтись без них.Иногда это сделать намного сложнее (из-за необходимости более четкого управления состоянием).

1 голос
/ 27 февраля 2011

Предложение cofunctions - это просто очистка существующих сопрограмм Python, которые, как известно, основаны на генераторах (любезно связаны с каноническим представлением ).PEP объясняет мотивы : делает сообщения об ошибках более явными, избегая необходимости определять, является ли функция генератором по наличию ключевого слова yield, и облегчая делегирование между сопрограммами.

...