在 Python 中,可迭代对象是指能够通过迭代器进行遍历的对象。
可迭代对象必须实现
__iter__()
方法,该方法返回一个迭代器对象。下面是一些在 Python 中常见的可迭代对象:
列表 (List): 列表是有序的,可以通过索引访问元素。可以使用
for
循环遍历列表。my_list = [1, 2, 3, 4, 5]
元组 (Tuple): 元组是不可变的有序序列,类似于列表。同样可以通过
for
循环遍历。my_tuple = (1, 2, 3, 4, 5)
字符串 (String): 字符串是不可变的字符序列,可以通过
for
循环遍历。my_string = "Hello"
集合 (Set): 集合是无序的,不重复的元素集合。同样可以通过
for
循环遍历。my_set = {1, 2, 3, 4, 5}
字典 (Dictionary): 字典是键值对的集合,可以通过
for
循环遍历键或值,或者使用items()
方法遍历键值对。
my_dict = {'a': 1, 'b': 2, 'c': 3}
# 遍历键
for key in my_dict:
print(key)# 遍历值
for value in my_dict.values():
print(value)# 遍历键值对
for key, value in my_dict.items():
print(key, value)
迭代器 (Iterator): 迭代器是实现了
__iter__()
和__next__()
方法的对象。通常,可迭代对象通过iter()
函数获得迭代器,迭代器通过next()
函数获取下一个元素。
my_iterable = [1, 2, 3, 4, 5]
my_iterator = iter(my_iterable)# 使用 next() 获取下一个元素
print(next(my_iterator))
这些都是 Python 中常见的可迭代对象,可以通过
for
循环或其他迭代方式来访问它们的元素。此外,自定义类可以通过实现__iter__()
方法来变成可迭代对象。
class SimpleIterator:
def __init__(self, data):
self.data = data
self.index = 0def __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 # 迭代结束时抛出 StopIteration 异常# 创建一个可迭代对象
my_iterator = SimpleIterator([1, 2, 3, 4, 5])# 使用 for 循环迭代对象
for item in my_iterator:
print(item)
输出
<__main__.SimpleIterator object at 0x0000015611FEFFD0>
1
2
3
4
5Process finished with exit code 0
迭代器协议是一种 Python 协议,它定义了对象应该如何支持迭代。实现迭代器协议需要两个方法:
__iter__
和__next__
。
__iter__
方法:
这个方法返回一个实现了
__next__
方法的对象,通常是迭代器本身。它负责返回一个可迭代的对象。当你在使用
for
循环时,for
循环会调用iter()
内建函数,该函数会调用对象的__iter__
方法,从而获取一个迭代器对象。在上述代码中,
__iter__
方法返回self
,因此迭代器对象就是对象本身。
__next__
方法:
这个方法返回迭代中的下一个元素。如果没有元素可供迭代,它应该抛出
StopIteration
异常,表示迭代结束。当
for
循环遍历对象时,它会调用对象的__next__
方法来获取下一个元素。在上述代码中,
__next__
方法检查索引是否小于数据的长度,如果是,返回当前索引位置的元素并将索引递增;如果不是,抛出StopIteration
异常,表示迭代结束。
当你在使用
for
循环时,Python 会自动调用iter()
获取迭代器对象,然后调用next()
方法来获取下一个元素,直到StopIteration
异常被捕获,表示迭代结束。