-
__iter__():返回迭代器对象本身。这允许对象用于‘for’循环和其他迭代上下文。 -
__next__():返回下一个值。如果没有更多值可返回,则应引发’StopIteration‘异常。
class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index < len(self.data):
result = self.data[self.index]
self.index += 1
return result
else:
raise StopIteration
my_list = [1, 2, 3, 4, 5]
my_iter = MyIterator(my_list)
for item in my_iter:
print(item)
-
‘iter(obj)’:从可迭代对象创建一个迭代器。 -
‘next(iterator[, default])’:从迭代器获取下一个元素。如果迭代器已耗尽,且提供了 default,则返回 default 值;否则引发 StopIteration 异常。
my_list = [10, 20, 30, 40]
my_iter = iter(my_list)
print(next(my_iter)) # 输出:10
print(next(my_iter)) # 输出:20
print(next(my_iter)) # 输出:30
print(next(my_iter)) # 输出:40
# print(next(my_iter)) # 再次调用会引发StopIteration异常
可迭代对象(Iterable)
任何实现了 __iter__() 方法的对象都是可迭代对象,它返回一个迭代器对象。所有内置的集合类型(如列表、元组、字典、集合等)都是可迭代对象。
生成器也是迭代器一种,实现更复杂的迭代器。生成器使用关键词’yield’生成值,并自动实现迭代协议。后面会更详细地讲解。
代码地带
用迭代器生成斐波那契数列
class Fibonacci:
def __init__(self, max):
self.max = max
self.a = 0
self.b = 1
def __iter__(self):
return self
def __next__(self):
if self.a > self.max:
raise StopIteration
a = self.a
self.a, self.b = self.b, self.a + self.b
return a
# 使用Fibonacci迭代器
fibonacci = Fibonacci(10)
for num in fibonacci:
print(num)
原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/88142.html