|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
class Double:
def __init__(self,start,stop):
self.value = start - 1
self.stop = stop
def __iter__(self):
return self
def __next__(self):
if self.value == self.stop:
raise StopIteration
self.value += 1
return self.value * 2
d = Double(1,5)
for i in d:
print(i,end=' ')
2 4 6 8 10
想问一下,这段代码里面的__iter__和__next__是自己随便定义的函数名字吗?还是只要见到这两个名字就表示__iter__()生成了一个迭代器、__next__()会进行自动迭代操作?__next__()是不是就相当于一个循环,会循环执行其下面的代码?这个例子里就是会自动将self.value +1后循环执行,直到符合
self.value == self.stop,然后raise StopIteration后自动停止?
请大神指教,谢谢!
__iter__ 和 __next__ 不是随便定义的函数名字,而是 Python 的特殊方法(特殊方法也称为魔术方法,由于其名称以双下划线开头和结尾,例如 __init__、__str__ 等)。当你在类中定义这两个方法时,Python 会将这个类识别为一个迭代器,它能够实现迭代协议。
__iter__() 方法应该返回一个迭代器对象,它定义了当类的实例被用于 for 循环时的行为。在这个例子中,__iter__() 直接返回 self,因为 Double 类本身就是一个迭代器。
__next__() 方法定义了迭代器的下一个元素是什么。每当 Python 需要获取迭代器的下一个元素时,它就会调用 __next__() 方法。当没有更多元素可以迭代时,__next__() 方法应该抛出一个 StopIteration 异常。在这个例子中,__next__() 方法会不断返回当前值(self.value)的两倍,直到达到 self.stop 为止。
所以,__next__() 并不相当于一个循环,而是定义了迭代器每次迭代时要执行的操作。实际的循环是由 for 循环来执行的。当 for 循环遇到 StopIteration 异常时,它会自动停止迭代。在这个例子中,for i in d: 就是执行循环的地方。
|
|