Python 类中无_iter__方法的迭代器协议的实现
我用这段代码实现了迭代器协议,一切都很好。Python 类中无_iter__方法的迭代器协议的实现,python,python-3.x,Python,Python 3.x,我用这段代码实现了迭代器协议,一切都很好。 理想情况下不应该这样,因为我没有实现iter() class PowerofTwo(): 定义初始化(自,最大): self.max=maxi self.num=0 定义下一个(自我): 如果self.num正是函数试图调用的方法,而您的类有一个\uuuuuuuuuuuuuu。为什么您希望它不起作用?PowerofTwo是一个迭代器,但它不可迭代。iterable是可以传递给iter的东西;迭代器是iter返回的东西,可以传递给next。有些东西,比如
理想情况下不应该这样,因为我没有实现
iter()
class PowerofTwo():
定义初始化(自,最大):
self.max=maxi
self.num=0
定义下一个(自我):
如果self.num
即使假定\uu iter\uuuuuuuuu()
方法在默认情况下是可用的,比如\uuuuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu()
但是我无法理解如何直接调用
next()
并从一开始就跳过调用iter(obj)
。若我尝试使用列表或其他内置迭代器执行相同的操作,我会得到一个错误,即对象不是迭代器
我缺少一些基本的东西吗?目前,
PowerofTwo
是一个迭代器,但它不是一个iterable。为了使其可移植,您需要定义\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
以返回具有\uuuuuuuuuuuuuuuuuuuuuuu。在这种情况下,PowerofTwo
实例本身就可以了
class PowerofTwo:
def __init__(self,maxi):
self.max = maxi
self.num = 0
def __iter__(self):
return self
def __next__(self):
if self.num < self.max:
result = 2 ** self.num
self.num += 1
return result
else:
raise StopIteration
for x in PowerofTwo(5):
print(x)
始终定义
def __iter__(self):
return self
在定义\uuuuuuuuuuuuuuuuuuuuuuuuuuu
的类中
list
是一个类的示例,该类的\uuuuuuuuuuuuuuuuuuuuu
方法返回另一个类的实例,即列表迭代器\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>正是函数试图调用的方法,而您的类有一个\uuuuuuuuuuuuuu。为什么您希望它不起作用?PowerofTwo
是一个迭代器,但它不可迭代。iterable是可以传递给iter的东西;迭代器是iter
返回的东西,可以传递给next
。有些东西,比如open
返回的对象,既是iterable,也是迭代器。其他的,比如list
,是可编辑的,但不是迭代器iter([1,2,3])
返回的不是列表,而是一个类型为list\u iterator
@chepner的值,需要做哪些修改才能使PowerofTwo成为一个iter?您需要定义\uu iter\uuuuu
,但它除了返回self
之外不需要做任何事情。
1
2
4
8
16
def __iter__(self):
return self