Python 迭代器、生成器
迭代器是一个可以记住遍历位置的对象。
迭代器从集合的第一个元素开始访问,直到所有的元素被访问完。迭代器只能往前不会后退。
迭代器两个基本方法: iter() 和 next()。
1. 迭代器 VS 可迭代对象(Iterable)
列表、元组、字典、集合都是可迭代对象。它们是迭代的容器,可从容器中获取迭代器(Iterator)。
实例:
从元组返回一个迭代器
mytuple = ("apple", "banana", "cherry") myit = iter(mytuple) # 创建迭代器对象 print(next(myit)) # 输出迭代器的下一个元素 print(next(myit)) print(next(myit))
输出:
apple
banana
cherry
字符串也是可迭代对象。
mystr = "banana" myit = iter(mystr) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit))
输出:
b
a
n
a
n
a
2. 遍历迭代器
mytuple = ("apple", "banana", "cherry") for x in mytuple: print(x)
输出:
apple
banana
cherry
提示:for 循环实际上创建了一个迭代器对象,并为每个循环执行 next() 方法。
3. 创建迭代器
把一个类作为一个迭代器需要在类中实现 __iter__() 和 __next__() 方法。
__iter__() 方法返回一个特殊的迭代器对象,这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成。
__next__() 方法返回下一个迭代器对象。
实例:
创建一个返回数字的迭代器,初始值 1,逐步递增 1。
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter))
输出:
1 2 3 4 5
StopIteration
结束迭代,防止出现无限循环。
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): if self.a <= 10: x = self.a self.a += 1 return x else: raise StopIteration myclass = MyNumbers() myiter = iter(myclass) for x in myiter: print(x)
输出:
1 2 3 4 5 6 7 8 9 10
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)