📅  最后修改于: 2023-12-03 15:25:09.865000             🧑  作者: Mango
在 Python 中,迭代器是一种用于遍历集合的对象。迭代器在 Python 中的使用非常广泛,例如在 for 循环语句中使用。
Python 中的实际迭代器是通过实现迭代器协议来实现的。迭代器协议需要实现两个方法:iter()和__next__()方法。
iter()方法返回迭代器对象自身,next()方法返回下一个元素,如果没有元素了,则抛出StopIteration异常。
class MyIterator:
def __init__(self, my_list):
self.my_list = my_list
self.current = 0
def __iter__(self):
return self
def __next__(self):
if self.current < len(self.my_list):
ele = self.my_list[self.current]
self.current += 1
return ele
else:
raise StopIteration()
# 使用MyIterator
my_list = [1, 2, 3, 4, 5]
my_iterator = MyIterator(my_list)
for ele in my_iterator:
print(ele)
Python 语言中,有很多内置的迭代器,例如 range、enumerate、zip 等函数都可以作为一个迭代器。
# 使用range作为迭代器
for i in range(5):
print(i)
# 使用enumerate作为迭代器
my_dict = {'a': 1, 'b': 2, 'c': 3}
for k, v in enumerate(my_dict):
print(k, v)
# 使用zip作为迭代器
my_list1 = [1, 2, 3]
my_list2 = ['a', 'b', 'c']
for ele1, ele2 in zip(my_list1, my_list2):
print(ele1, ele2)
以上三个例子中,range、enumerate、zip 都返回了一个迭代器对象,我们可以使用 for 循环语句来遍历这些迭代器对象。
Python 中的迭代器还支持一些高级技巧,例如迭代器生成器、迭代器链式调用、迭代器表达式等等。
# 迭代器生成器
def my_generator():
yield 1
yield 2
yield 3
for ele in my_generator():
print(ele)
# 迭代器链式调用
my_list = [1, 2, 3, 4, 5]
my_iterator = map(lambda x: x * 2, filter(lambda x: x > 2, my_list))
for ele in my_iterator:
print(ele)
# 迭代器表达式
my_list = [1, 2, 3, 4, 5]
my_iterator = (x * 2 for x in my_list if x > 2)
for ele in my_iterator:
print(ele)
以上三个例子中,迭代器生成器利用了 yield 关键字来实现、迭代器链式调用利用了 map 和 filter 函数返回的迭代器来实现、迭代器表达式则使用了一种更加简便的迭代器表达方式。