Python教程23:迭代器(Iterator)

Python教程23:迭代器(Iterator) “万变不离其宗。” 我们已经用过很多次for循环,但你知道它背后的机制吗?今天我们学习迭代器(Iterator)——Python迭代的核心协议。 1. 什么是迭代器 可迭代对象vs迭代器 可迭代对象(Iterable): 可以用for循环遍历的对象 实现了__iter__()方法 例如:列表、元组、字典、字符串、生成器 迭代器(Iterator): 实现了__iter__()和__next__()方法的对象 可以被next()函数调用 记住当前位置,可以逐个返回元素 关系: 所有迭代器都是可迭代对象 但不是所有可迭代对象都是迭代器 可迭代对象调用iter()得到迭代器 1# 列表是可迭代对象,但不是迭代器 2my_list = [1, 2, 3] 3print(hasattr(my_list, '__iter__')) # True 4print(hasattr(my_list, '__next__')) # False 5 6# 获取迭代器 7iterator = iter(my_list) 8print(hasattr(iterator, '__iter__')) # True 9print(hasattr(iterator, '__next__')) # True 10 11# 使用迭代器 12print(next(iterator)) # 1 13print(next(iterator)) # 2 14print(next(iterator)) # 3 15# print(next(iterator)) # StopIteration 2. 迭代器协议 Python的迭代器协议包含两个方法: iter() 返回迭代器对象本身: 1class MyIterator: 2 def __iter__(self): 3 return self # 返回自己 作用: 让对象可以用于for循环 让对象可以调用iter() next() 返回下一个元素,没有元素时抛出StopIteration: 1class MyIterator: 2 def __next__(self): 3 # 返回下一个元素 4 # 或抛出StopIteration 5 pass 3. for循环的工作原理 for循环实际上是迭代器协议的语法糖: ...

2024-10-27 · 4 min · 797 words · 老墨