Comments 7
Что это было? Это же даже не обзор генераторных функций (генераторов). Потому, что:
В середине произошла подмена слова генератор на слово итератор, хотя это не одно и то же.
Не рассмотрена законная остановка запущенного генератора через generator.close()
Не затронута проблема доступа к значениям генератора через generator.gi_frame.f_locals
Не упомянут generator.send и то, что next(generator), это shortcut для generator.send(None)
Не отмечено, что next(generator, sentinel) подавляет исключение StopIteration и возвращает sentinel
Не приведена разница return value внутри генератора и raise StopIteration(value), и вообще не упомянут pep479, ухудшивший работу генераторов
Не указана недоработка, что генераторы не работают в nogil парадигме (актуально для новых версий python)
Ну и вообще не даны источники, где, все же, можно по-настоящему что-то узнать про генераторы (гениальный David Beazley, талантливый Łukasz Langa, и другие).
В общем @Pavel_K ждем доработанный вариант или продолжение статьи.
Как раз работал над второй частью
Вы на удивление точно предугадали ее синопсис )
Уже опубликовал
https://habr.com/ru/articles/936984/
Она пожинает (
yield
) значение и приостанавливает выполнение...
Можно было бы сказать, "испускает". :-)
(Жалко, надо бы дополнить статью. Но уже поздний час. Попробую завтра. Извините.)
(...) производить, приносить, давать (плоды, урожай, доход); this land yields poorly эта земля даёт плохой урожай; to yield no results не давать никаких результатов (...)
А вот ни в значении "пожинать", ни в значении "испускать" я это слово не обнаружил ни в словаре Мюллера, ни в словаре Королёва, ни в словаре Апресяна.
Ну вообще-то испускать, выпускать - вполне себе синонимы для производить, выдавать.
Вообще, я поймал себя на том, что идея использовать англо-русский словарь вместо английского толкового кажется странной. Понял смысл, ищешь синоним в своём языке, не ограничиваясь заведомо урезанным списком базовых значений.
Но в целом да, "выдаёт" будет более корректным переводом.
Согласен, что пожинает - это спорный термин (у него даже отсутствут некоторые глагольные формы) . Но мне хотелось привлечь к нему Ваше внимание и посоветоваться на этот счет.
Мне понравился Ваш вариант выдаёт - уместен в технической документации, и есть в нём что-то про фабрику, конвейер, процесс (как раз хорошо в контексте генераторов).
Заменил все упоминания "жать" на "выдаёт".
Спасибо
Что это было? Это же даже не обзор генераторных функций (генераторов). Потому, что:
В середине произошла подмена слова генератор на слово итератор, хотя это не одно и то же.
Не рассмотрена законная остановка запущенного генератора через generator.close()
Не затронута проблема доступа к значениям генератора через generator.gi_frame.f_locals
Не упомянут generator.send и то, что next(generator), это shortcut для generator.send(None)
Не отмечено, что next(generator, sentinel) подавляет исключение StopIteration и возвращает sentinel
Не приведена разница return value внутри генератора и raise StopIteration(value), и вообще не упомянут pep479, ухудшивший работу генераторов
Не указана недоработка, что генераторы не работают в nogil парадигме (актуально для новых версий python)
Ну и вообще не даны источники, где, все же, можно по-настоящему что-то узнать про генераторы (гениальный David Beazley, талантливый Łukasz Langa, и другие).
В общем @Pavel_K ждем доработанный вариант или продолжение статьи.
Как раз работал над второй частью
Вы на удивление точно предугадали ее синопсис )
Уже опубликовал
https://habr.com/ru/articles/936984/
Я об истории генераторов недавно писал статью кстати (там правда упор на JS, но связей с Python много). Может кому интересно будет! https://agroholism.dev/languages/asterisk-in-generators.html
Python: генераторные функции