Могу ли я выразить это как генератор / сопрограмму? - PullRequest
1 голос
/ 21 июня 2011

Предположим, у меня есть следующий класс:

class MyGen(object):
  def next(self):
    return X()

  def send(self, x):
    return f(x)

Можно ли выразить это как одну функцию, используя ключевое слово yield?Предположим, у меня есть g = MyGen().Обратите внимание, что g.next() не должен вызывать f(), а g.send(x) не должен вызывать X(), но f() и X() могут совместно использовать некоторый код.

Ответы [ 2 ]

3 голосов
/ 21 июня 2011

Этот код будет почти эквивалентен:

def my_gen(x=None):
    while True:
        if x is None:
            x = yield X()
        else:
            x = yield f(x)

Единственное отличие состоит в том, что вы не можете отправить значение (кроме None) в генератор до вызова next() в первый раз.Другое отличие состоит в том, что отправка None не вызовет вызов f(), поскольку генератор не может различить send(None) и next().

1 голос
/ 21 июня 2011

Формулировка Свена - это именно то, что нужно, я просто хочу добавить, что если вы хотите узнать больше о генераторах, сопрограммах и тому подобном в Python, этот сайт - это то, что нужно.

...