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