问题描述
通常生成器函数比迭代器更容易编写,例如考虑这个示例生成器函数
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 (将#修改为@)