Python进阶之迭代器与迭代器切片教程
1. 什么是迭代器
在 Python 中,迭代器是一个可以遍历任意可迭代对象(包括列表、元组、字典、字符串等)的对象,并且支持两个基本操作:__next__
和 __iter__
。
迭代器基本操作
__next__
方法返回可迭代对象的下一个元素,如果没有元素了抛出 StopIteration 异常。__iter__
方法返回当前迭代器对象本身。
我们可以通过调用 next()
函数来迭代一个迭代器对象,例如:
iter_list = iter([1, 2, 3])
print(next(iter_list)) # 输出: 1
print(next(iter_list)) # 输出: 2
print(next(iter_list)) # 输出: 3
print(next(iter_list)) # 抛出 StopIteration 异常
迭代器示例
我们可以通过定义一个对象同时实现 __next__
和 __iter__
方法来创建一个迭代器,例如:
class MyIterator:
def __init__(self, iterable):
self.iterable = iterable
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.iterable):
raise StopIteration
value = self.iterable[self.index]
self.index += 1
return value
iter_list = MyIterator([1, 2, 3])
print(next(iter_list)) # 输出: 1
print(next(iter_list)) # 输出: 2
print(next(iter_list)) # 输出: 3
print(next(iter_list)) # 抛出 StopIteration 异常
2. 什么是迭代器切片
在 Python 中,对于一些不支持普通切片([start:end:step]
)的可迭代对象,我们可以使用迭代器切片来获取元素。
迭代器切片示例
下面是一个使用迭代器切片获取无限斐波那契数列的前 10 个数的示例:
class _Fib:
def __init__(self):
self.a = 0
self.b = 1
def __next__(self):
value = self.a
self.a, self.b = self.b, self.a + self.b
return value
def __iter__(self):
return self
def take(n, iterable):
"Return first n items of the iterable as a list"
return [next(iterable) for _ in range(n)]
for i in take(10, _Fib()):
print(i)
输出结果为:
0
1
1
2
3
5
8
13
21
34
3. 总结
本文主要介绍了迭代器与迭代器切片的概念和基本操作,并且使用示例说明了如何使用迭代器切片来获取无限斐波那契数列的前 10 个数,希望可以帮助大家更好地了解和使用 Python 中的迭代器。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python进阶之迭代器与迭代器切片教程 - Python技术站