导入
迭代器协议
通过手动使用 iter() 和 next() 控制迭代,并处理 StopIteration 信号,揭开 Python 循环的内部机制。
1# 一个简单的列表(可迭代对象) 2colors = ["Red", "Green", "Blue"] 3 4# 从列表中获取迭代器 5color_cursor = iter(colors) 6 7# 手动获取项目 8first_item = next(color_cursor) 9print(f"First: {first_item}") 10 11second_item = next(color_cursor) 12print(f"Second: {second_item}") 13 14third_item = next(color_cursor) 15print(f"Third: {third_item}")
1numbers = [10, 20, 30] 2number_stream = iter(numbers) 3 4print("Starting manual loop...") 5 6while True: 7 try: 8 # 请求下一个项目 9 item = next(number_stream) 10 print(f"Processing: {item}") 11 except StopIteration: 12 # 当迭代器为空时执行此块 13 print("Iterator is empty. Stopping loop.") 14 break
1text = "Hi" 2text_iterator = iter(text) 3 4# 检查迭代器对象 5print(f"Methods in iterator: {dir(text_iterator)}") 6 7# 直接调用特殊方法(与 next(text_iterator) 相同) 8print(text_iterator.__next__()) 9print(text_iterator.__next__()) 10 11# 下一次调用将引发 StopIteration 12# text_iterator.__next__()
1data = ["A", "B", "C"] 2 3# 为同一列表创建两个独立的迭代器 4iter_1 = iter(data) 5iter_2 = iter(data) 6 7# 移动 iter_1 前进 8print(f"Iterator 1: {next(iter_1)}") 9 10# 移动 iter_2 前进(它从开头开始) 11print(f"Iterator 2: {next(iter_2)}") 12 13# 再次移动 iter_1 14print(f"Iterator 1: {next(iter_1)}") 15 16# iter_2 仍停留在 'B' 17print(f"Iterator 2: {next(iter_2)}")