微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在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 举报,一经查实,本站将立刻删除。