python中的Iterator与Iterable(迭代器与可迭代)
一 前言
环境: python 3.10 win10
二 Iterator(迭代器)
Iterator 是python的内置类型之一,看下其定义
该类型的实例对象称之为iterator(迭代器对象)
要得到一个iterator(迭代器对象),可用内置函数iter()将 list tuple等转成迭代器对象
也可以自定义一个迭代器类型的class,该class的实例对象就是迭代器对象
迭代器对象需要支持一下两个方法:
-
iterator.iter(): 返回迭代器对象本身()
-
iterator.next():重复调用该方法,将逐个返回迭代器中的数据,如果已经没有可返回的项,则会引发 StopIteration 异常
下面自定义一个迭代器对象的class,该class的迭代器对象通过__next__()或者内置函数next()能不断返回偶数
实际使用中,并不需要一直重复调用next(),因为迭代器对象也一定是后面讲的可迭代对象,所以。可直接将迭代器用于for循环中,不断返回其中的数据
注意,上图中第一次调用Get_num()方法时,并没有打印出数据
因为这时候使用的迭代器对象it和之前代码中next(it)的it是同一个对象,而之前该迭代器对象已经输出到数字6,这时候再调用Get_num()方法,方法中for循环其实也是不断调用next()方法,所以此时Get_num()中得到的数字是8,而数字8遇到break就不会打印出来
第二次调用Get_num(),我们重新生成了一个迭代器对象作为参数传了进去,和之前的不是一个对象,作为一个全新的迭代器对象,此时就会按照class的定义从0开始输出
用内置函数转换得到的迭代器对象也有上面两个方法
判断一个对象是否是否是Iterator类型
三 Iterable(可迭代)
Iterable也是一种类型即class ,看下其定义
这种类型的对象称为可迭代对象,它是一种能够逐个返回其成员项的对象。 可迭代对象的例子包括所有序列类型(如 list, str 和 tuple 等)以及某些非序列类型如 dict, 文件对象 以及任何定义了 iter() 方法或实现了 sequence 语义的 getitem() 方法的自定义类的对象。
由上面可知,迭代器对象一定是可迭代对象,因为迭代器对象肯定支持__iter__()方法,class的定义也显示Iterator继承自Iterable
反过来,可迭代对象不一定是迭代器
英语单词iterate本就有迭代、重复、反复之意。
可迭代对象可用于for循环,不断得到其中的数据
判断一个对象是否是可迭代类型
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南