Python:使用与生成器和常规函数相同的功能

时间:2015-04-22 18:49:15

标签: python generator subroutine

是否可以将函数用作常规函数(执行填充和返回)和生成器函数?

假设我有以下代码:

    def __init__(self):
        self.make_generator = False

    def foo(self):
        gen = (x for x in my_list)
        for x in gen:
            # Do some stuff
                if self.make_generator:
                    yield
        # This return will raise a StopIteration
        return

这里的想法是,如果self.make_generator是假的,那么我不希望foo屈服;我希望它不是一个发电机,所以我可以这样称呼:

    foo()

如果我希望它在迭代之间产生,我会把它变成像这样的生成器:

    def __init__(self):
        self.make_generator = True
        self.foo_gen = self.foo()

    def run(self):
        while True:
            self.foo_gen.next()

但似乎这是不可能的。我想保持我的代码干,但我不确定当foo是一个生成器时它是如何控制的,当它像常规函数一样执行时。

谢谢!

0 个答案:

没有答案