1. Python 迭代器介绍
Python 迭代器指的是一个带有 __iter__()
和 __next__()
方法的对象,它可以用于遍历数据集合中的元素。迭代器是实现了迭代器协议的对象,可以通过内置的 iter()
函数来获取迭代器对象。
1.1 迭代器协议
迭代器协议是指一个对象必须实现的两个方法:
__iter__()
方法返回迭代器本身。
__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):
raise StopIteration
element = self.data[self.index]
self.index += 1
return element
my_iter = MyIterator([1, 2, 3])
for item in my_iter:
print(item)
在上面的例子中,定义了一个自定义的迭代器类 MyIterator
,它实现了迭代器协议。通过 __iter__()
方法返回迭代器本身,通过 __next__()
方法返回下一个元素。
1.2 内置迭代器
Python 提供了许多内置的迭代器对象,可以用于快速遍历常见的数据结构。
例如,我们可以使用 range()
函数创建一个迭代器来遍历指定范围的整数序列:
for i in range(5):
print(i)
以上代码会输出:
0
1
2
3
4
2. Python 迭代器的作用
迭代器在 Python 中广泛应用于循环结构中,它提供了一种便捷的方式来遍历各种不同的数据结构。
2.1 遍历列表
使用迭代器可以方便地遍历列表中的每个元素:
my_list = [1, 2, 3, 4, 5]
for item in my_list:
print(item)
以上代码会输出:
1
2
3
4
5
2.2 遍历字典
字典是 Python 中常用的数据结构之一,使用迭代器可以遍历字典中的键和值:
my_dict = {'name': 'Alice', 'age': 18, 'gender': 'female'}
for key, value in my_dict.items():
print(key, value)
以上代码会输出:
name Alice
age 18
gender female
2.3 遍历文件
Python 迭代器还可以用于遍历文件中的每一行:
with open('data.txt', 'r') as file:
for line in file:
print(line)
以上代码会将文件 data.txt
中的每一行输出。
2.4 惰性计算
迭代器的另一个重要作用是实现惰性计算。惰性计算是指在需要时才生成计算结果,而不是立即执行整个计算过程。通过使用迭代器,我们可以按需生成计算结果,节省了内存和计算资源。
下面是一个计算斐波那契数列的例子:
class FibonacciIterator:
def __init__(self):
self.prev = 0
self.curr = 1
def __iter__(self):
return self
def __next__(self):
value = self.curr
self.prev, self.curr = self.curr, self.prev + self.curr
return value
fib_iter = FibonacciIterator()
for i in range(10):
print(next(fib_iter))
以上代码会输出斐波那契数列的前十个数字。
3. 总结
迭代器是 Python 中一种重要的数据结构,它可以方便地遍历各种不同类型的数据集合。本文介绍了迭代器的概念、迭代器协议以及内置的迭代器对象。此外,还介绍了迭代器在遍历列表、字典和文件中的应用,以及迭代器的惰性计算特性。
通过灵活使用迭代器,可以提高代码的简洁性和可读性,同时也能够节省内存和计算资源。