如何在python中将生成器函数转换为迭代器对象?

问题描述

通常生成函数比迭代器更容易编写,例如考虑这个示例生成函数

def generator_fn():
    x = 0
    for y in range(10):
         x += y
         yield x

是否有一种直接的方法可以将任意生成函数转换为迭代器对象,即

class IteratorFromGenerator(object):

    def __init__(self,generator_fn):
        self.generator_fn = generator_fn

    def __iter__(self):
        # ???
        pass

    def __next__(self):
        # ???
        pass

对我来说这似乎是有利但不可能的。 有利,因为生成函数通常编写起来更简单并且需要的代码更少。通常,我开始编写生成函数,并且在某个时候,我需要一个迭代器对象(例如,当 generator_fn 是我的 class Foo 的成员并且我想编写 for x in my_foo 而不是 {{1 }}。 不可能,因为生成函数定义了循环过程的执行流程,而迭代器对象只是提供它们的 for x in my_foo.generator_fn() 接口以供未定义的“外部”执行流程所请求。

我是对的还是有可能这样做?

当然,除了将所有生成的元素消耗到一个列表中的琐碎的、消耗内存的解决方案。

感谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)