不直接。允许生成器用于实现协同例程,资源管理等的灵活性的一部分是,它们始终是一次性的。一旦运行,发电机将无法重新运行。您将必须创建一个新的生成器对象。
但是,您可以创建自己的覆盖的类
__iter__()。它将像可重用的生成器一样工作:
def multigen(gen_func): class _multigen(object): def __init__(self, *args, **kwargs): self.__args = args self.__kwargs = kwargs def __iter__(self): return gen_func(*self.__args, **self.__kwargs) return _multigen@multigendef myxrange(n): i = 0 while i < n: yield i i += 1m = myxrange(5)print list(m)print list(m)



