我试图理解的代码有一个类来创建一个生成器,这个生成器稍后会使用内置的next()进行迭代。你知道吗
讨论的课程是:
Class MyGen():
def __init__(self):
""" Define some instance attributes"""
self.foo = 'bar'
self.some_attribute = 0
def __next__(self):
if self.some_attribute < some_condition:
new_value = self.argument1
self.some_attribute += 1
return new_value
在全局函数中,返回的对象由next()内置函数遍历。那是。。。你知道吗
gen = Mygen()
next(gen) # Returns values
我不明白如果没有__iter__()
方法,这个类怎么可能是一个生成器。是
__iter__()
从类生成生成器所需的方法?在我搜索的每一个地方,似乎__iter__()
和__next__()
一起用于从类创建生成器。你知道吗
我对Python还比较陌生。这个代码示例是我展示问题所在的最佳尝试,因为实际的代码做的更多,而且会偏离问题,而且太长,不能放在这里。我没有足够的经验,知道如何缩短它比这个或更多的信息是必需的。你知道吗
对象上的
__iter__
方法应该返回该对象的迭代器。它应该为任何可iterable的对象定义,并由内置的iter()
函数或各种语句调用(例如在for i in obj:
循环的初始化步骤中)迭代器只是带有
__next__
方法的东西,该方法返回iterable的下一项,或者在没有剩余项时引发StopIteration
。它由内置的next()
函数调用,并在各种情况下被调用(例如,就在for
循环体之前)生成器是一个iterable,它很可能不可重复,所以它经常被表示为iterable,iterable也是一个迭代器。因此对于大多数生成器,它们定义了一个
__next__
方法来生成下一个元素,以及一个__iter__
方法来返回self。你知道吗next(x)
在大多数情况下几乎直接转换为x.__next__()
。你知道吗因此,调用
__next__
方法时,gen
不是“真正的”生成器。你知道吗调用是有效的,它只是一个简单的方法调用(不做任何假设也不检查对象)。你知道吗
相关问题 更多 >
编程相关推荐