可迭代的对象
定义
可迭代对象是指可以使用迭代器(Iterator)进行遍历的对象。在 Python 中,可迭代对象是实现了 __iter__()
方法的对象,该方法返回一个迭代器对象,或者实现了 __getitem__()
方法并接受从 0 开始的整数索引。
- 可迭代对象是 Python 中非常重要的概念,它允许你使用
for
循环等迭代工具来遍历对象的元素。 - 可迭代对象可以是内置的数据结构,如列表、元组、字符串、字典和集合,也可以是自定义的对象,只要它们实现了
__iter__()
或__getitem__()
方法。 - 迭代器是实现迭代的核心,它使用
__next__()
方法提供元素,并通过抛出StopIteration
异常表示迭代结束。
示例
通过使用可迭代对象和迭代器,可以方便地遍历和处理序列中的元素,这在 Python 编程中是一种简洁和高效的方式。
- 列表(List):
my_list = [1, 2, 3, 4]
for item in my_list:
print(item)
- 列表是可迭代对象,它实现了
__iter__()
方法。当使用for
循环遍历列表时,会调用my_list.__iter__()
方法获取一个迭代器,然后通过迭代器依次访问列表中的元素。
迭代器协议
- 可迭代对象通过
__iter__()
方法返回一个迭代器。迭代器是一个实现了__next__()
方法的对象,该方法返回迭代中的下一个元素,如果没有元素了,则会抛出StopIteration
异常。 - 例如,你可以手动调用迭代器:
my_list = [1, 2, 3]
iter_obj = iter(my_list) # 等价于 my_list.__iter__()
print(next(iter_obj)) # 等价于 iter_obj.__next__(),输出 1
print(next(iter_obj)) # 输出 2
print(next(iter_obj)) # 输出 3
print(next(iter_obj)) # 抛出 StopIteration 异常
自定义可迭代对象
- 你可以自定义可迭代对象,只要实现
__iter__()
方法即可。以下是一个简单的自定义可迭代对象的示例:
class MyIterable:
def __init__(self):
self.data = [1, 2, 3]
def __iter__(self):
self.index = 0
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_iterable = MyIterable()
for item in my_iterable:
print(item)
- 在这个示例中,
MyIterable
类实现了__iter__()
方法,该方法返回self
,并且该类也实现了__next__()
方法,用于依次返回列表中的元素,当元素耗尽时,会抛出StopIteration
异常。
检查可迭代性
- 你可以使用
iter()
函数检查一个对象是否可迭代。如果对象是可迭代的,iter()
函数会返回一个迭代器对象,否则会抛出TypeError
。
def is_iterable(obj):
try:
iter(obj)
return True
except TypeError:
return False
print(is_iterable([1, 2, 3])) # 输出 True
print(is_iterable(123)) # 输出 False