是否可以将函数用作常规函数(执行填充和返回)和生成器函数?
假设我有以下代码:
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是一个生成器时它是如何控制的,当它像常规函数一样执行时。
谢谢!