Прежде чем я скажу слово, позвольте мне поблагодарить сообщество за то, что он был авторитетным местом для моих запросов программирования на недавнем. И притворяйтесь, что эти комплименты не были выражены с помощью слов. Во всяком случае, закон вероятности диктовал, что я наткнулся на то, что я не смог найти, используя универсальную панель поиска, поэтому я решил прямо спросить в первый раз. Возможно, я просто не искал, используя Pythonic-достаточно лингви. Или, возможно, я сосать в Googling/Stackoverflowing. Вне зависимости от...
Я играю с сопрограммами и генераторами Python. Из того, что я могу собрать, вы можете делать все, что может быть с генератором, с сопроводителями производителей, хотя и более подробно. В настоящее время я использую Python 3, хотя любые ответы, касающиеся Python 2, тоже не пропадут.
Итак, я предполагаю, что следующие фрагменты кода эквивалентны:
one_to_three = (num for num in range(1, 4))
...
def one_to_three():
for num in range(1, 4):
yield num
one_to_three_gen = one_to_three()
Он работает на моей установке Python. Если я игнорирую примеры избыточности - так распространены в примерах, которые содержатся в этом коде, я вижу, что понимание генератора легко преобразуется в генератор, созданный сопроводителем-производителем. Будучи доктором Прагматиком, я попытался сопоставить одну и ту же концепцию с диктофонами, учитывая, что существуют уже существующие соображения, со мной думают, что эти два будут эквивалентны:
one_to_three_doubles = {num : num * 2 for num in range(1, 4)}
...
def one_to_three_doubles():
for num in range(1, 4):
yield num : num * 2
one_to_three_doubles_gen = one_to_three_doubles()
Первый работает, а второй - нет. Он помещает синтаксическую ошибку в двоеточие на третьей строке.
Теперь я либо немного сползаю по синтаксису, либо у меня есть огромное непонимание того, как работают сопрограммы производителей. Я подозреваю, что он не работает по той же причине, что вы не можете заставить сопрограмму вернуть список в отличие от генератора, но я действительно не знаю.
Так что да, исправление этой ошибки в основном - то, о чем я прошу; заранее спасибо. Я бы предпочел ответ, который подскажет мне ответ, а не дать мне совершенно новый способ достижения результата, но, очевидно, если это единственный способ...