上一篇
Python迭代机制详解 - 从基础到高级应用 | Python编程教程
- Python
- 2025-08-18
- 1020
Python迭代机制完全指南
掌握可迭代对象、迭代器与生成器的核心概念
什么是迭代?
迭代是Python中访问集合元素的一种方式,它允许我们逐个访问数据集合中的元素,而不需要知道集合的内部结构。
简单来说:迭代就是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。在Python中,每次对过程重复称为一次"迭代"。
可迭代对象 vs 迭代器
可迭代对象 (Iterable)
- 实现了
__iter__()
方法的对象 - 可以被用于
for
循环 - 可以多次使用
- 例如:列表、元组、字典、字符串
迭代器 (Iterator)
- 实现了
__iter__()
和__next__()
方法的对象 - 可以记住遍历的位置
- 只能遍历一次
- 例如:文件对象、生成器
关键区别:所有迭代器都是可迭代对象,但并非所有可迭代对象都是迭代器。可迭代对象可以转换为迭代器使用 iter()
函数。
迭代基础:使用for循环
Python中最常见的迭代方式是使用 for
循环:
# 遍历列表 fruits = ["苹果", "香蕉", "橙子"] for fruit in fruits: print(fruit) # 遍历字典 person = {"name": "张三", "age": 30, "city": "北京"} for key, value in person.items(): print(f"{key}: {value}") # 遍历字符串 text = "Python" for char in text: print(char)
手动迭代:iter()和next()
了解底层机制:手动控制迭代过程
# 创建可迭代对象 numbers = [1, 2, 3, 4, 5] # 转换为迭代器 numbers_iter = iter(numbers) # 手动获取元素 print(next(numbers_iter)) # 输出: 1 print(next(numbers_iter)) # 输出: 2 print(next(numbers_iter)) # 输出: 3 # 继续迭代剩余元素 for num in numbers_iter: print(num) # 输出: 4, 5 # 尝试获取超出范围的元素会引发StopIteration异常 try: print(next(numbers_iter)) except StopIteration: print("迭代结束")
创建自定义迭代器
通过实现 __iter__()
和 __next__()
方法创建自定义迭代器:
class Countdown: def __init__(self, start): self.current = start def __iter__(self): return self def __next__(self): if self.current <= 0: raise StopIteration else: num = self.current self.current -= 1 return num # 使用自定义迭代器 countdown = Countdown(5) for num in countdown: print(num) # 输出: 5, 4, 3, 2, 1
生成器:简化迭代器创建
生成器是一种更简单的创建迭代器的方法,使用 yield
关键字:
# 生成器函数 def fibonacci(limit): a, b = 0, 1 while a < limit: yield a a, b = b, a + b # 使用生成器 fib_gen = fibonacci(100) for num in fib_gen: print(num, end=" ") # 输出: 0 1 1 2 3 5 8 13 21 34 55 89 # 生成器表达式 squares = (x*x for x in range(10)) print("\n平方数:", list(squares))
生成器优势:内存高效(惰性计算)、代码简洁、支持无限序列
迭代工具与技巧
enumerate()
同时获取索引和元素
fruits = ["苹果", "香蕉", "橙子"] for i, fruit in enumerate(fruits): print(f"{i}: {fruit}")
zip()
并行迭代多个序列
names = ["张三", "李四", "王五"] ages = [25, 30, 28] for name, age in zip(names, ages): print(f"{name}今年{age}岁")
itertools模块
提供高级迭代工具
import itertools # 无限计数器 counter = itertools.count(start=10, step=2) # 排列组合 perms = itertools.permutations("ABC", 2)
迭代最佳实践总结
- 优先使用
for
循环进行迭代 - 处理大文件时使用迭代器避免内存溢出
- 需要索引时使用
enumerate()
- 并行迭代使用
zip()
- 创建复杂迭代器时使用生成器
- 了解迭代器只能使用一次的特性
- 使用
itertools
处理复杂迭代逻辑 - 惰性求值可以提升性能
本文由GanXian于2025-08-18发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20258406.html
发表评论