如何解决是否有必要在 python 中的自定义迭代器类上显式调用 iter()?
我们有这个自定义迭代器类的图像:
class Counter:
def __init__(self,low,high):
self.current=low-1
self.high=high
def __iter__(self):
return self
def __next__(self):
self.current+=1
if self.current < self.high:
return self.current
raise stopiterationError
是否有必要先在对象上调用iter()
,然后再在其上调用next()
? (我不想使用 for 循环)
Obj=Counter(1,10)
i=iter(Obj)
print(next(i))
或者:
Obj=Counter(1,10)
print(next(Obj))
两者似乎都有效。
解决方法
从已经是迭代器的迭代器创建迭代器(调用 iter(...)
)是一个空操作。这解释了为什么您的两个代码段的工作方式相同。
现在,什么是迭代器?
和您一样,它是 __next__
方法的实现。当您对其调用 __iter__
时会使用 iter
魔术函数。通常,这两种方法是一起实现的。
因此,您的类的实例已经是一个迭代器,无需再创建。
还值得注意的是,通常迭代器仅用于 for
循环中,其中 next
或 __next__
被隐式调用。因此,您对迭代器的测试 - next(i)
就像迭代器上的 for
循环的一个循环。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。