学习笔记--可迭代对象、迭代器、生成器
迭代器、生成器、可迭代对象之间什么关系,这两天学习的时候,发现比较绕,总结记录下。
1. 了解迭代器
首先,我们要知道一个概念,什么叫 ”可迭代”, 所谓的可迭代,简单理解就是可以 被for循环,
在介绍迭代器之前,我们需要知道两个概念:
(1)可迭代协议, 所有实现了,__iter__方法的对象,都是可迭代类型。例如,字符串、list、tuple、set,range(数字),以及任何实现了__iter__方法的对象。
(2)迭代器协议,所有实现了, __iter__方法以及__next__方法的对象,都是迭代器。__next__方法要么返回下一个值,要么抛出一个StopIteration异常,以终止迭代。
实现了迭代器协议的对象都是迭代器。
2.迭代器的特点:
迭代器有三个特点
(1)只能从头到尾,依次取值,不能返回去取某个位置的值。
(2)任何值只能取一次,取了之后,不能取第二次。
(3) 迭代器是一个对象,只有在取值时,才真正的去取值。
3迭代器的取值方法:
迭代器的取值方法有三种:
(1)使用__next__()方法进行取值,
(2)使用for循环去取值
(3)使用list(迭代器对象)进行取值。
4.生成器
迭代器有很多的优点,但是在定义的时候,还是比较麻烦的,那有没有更加简单的方法获取一个迭代器呢,答案是有的,那就是生成器。
生成器就是一个装饰器(满足装饰器协议,实现了__next__方法,以及__iter__方法)。并且它的定义比装饰器更加简单,只需要在方法中,添加一个yield,来返回值,就可以了。
其他和迭代器一模一样。
1 2 3 4 5 6 7 8 9 10 | def ff(): for i in range ( 5 ): yield i if __name__ = = '__main__' : f = ff() #<generator object ff at 0x000001AD0><br> print(f) # print (f.__next__()) #0 print ( next (f)) #1 print ( list (f)) #[2, 3, 4] |
分类:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix