迭代器
最编程
2024-04-17 21:37:12
...
迭代器:
-
可迭代对象
-
字面意思:
-
对象:python中一切皆对象,一个实实在在的值
-
可迭代:更新迭代,重复循环的一个过程,更新迭代每次都有新的内容,可以进行循环更新带的一个实实在在的值
-
专业角度:可迭代对象是内部含有
__iter__
方法的对象,就是可迭代对象。目前学过的 str list tuple dict set range 文件句柄 -
获取一个对象的所有方法 dir()
-
s1 = '123' print('__iter__' in dir(s1)) # True
-
优点:
- 储存的数据直接能显示,比较直观
- 拥有的方法比较多
-
缺点:
- 占用内存。
- 不能直接通过for循环,不能直接取值(索引,key)
-
-
-
迭代器的定义
-
字面意思:更新迭代,器:工具:可更新迭代的工具
-
专业角度:内部含有
__iter__
方法并且含有__next__
方法的对象就是迭代器 -
可以判断是否是迭代器
__iter__
and__next__
在不在dir()里 -
可迭代对象可以转化成迭代器
s1 = 'faveebbwa' obj = iter(s1) #s1.__iter__也可以将这个字符串转化成迭代器 print(obj) 取值操作 print(next(obj)) #print(obj.__next__())也可以对这个迭代器进行取值
-
判断一个对象是不是迭代器
with open('文件一','w',encoding='utf-8') as f1: print('__iter__' in dir(f1) and '__next__' in dir(f1))
-
-
迭代器的取值:
s1 = [11,22,33,44] obj = iter(s1) print(obj) print(next(obj)) print(next(obj)) print(next(obj))
-
小结
-
字面意思:更新迭代,器:工具:可更新迭代的工具
-
专业角度:内部含有
__iter__
方法并且含有__next__
方法的对象就是迭代器 -
优点:
- 节省内存:(在文件使用中readline如果读取的100g的文件内存会直接爆炸,但是迭代器只会一行一行的读取,读完一行就会在内存中删除,只会占一行内存,极大的节省了内存)
- 惰性机制:next一次 只会取一个值
有一个迭代器模式可以很好的解释上面这两条:迭代器是数据处理的基石,扫描内存中放不下的数据时,我们要找到一个惰性获取数据项的方式,即按一次获取一个数据项,这就是迭代器方式。
-
缺点:
- 速度慢 以时间换空间
- 不走回头路
-
可迭代对象与迭代器的对比:
- 可迭代对象是一个操作方法比较多,比较直观,存储数据相对少的一个数据集。
- 当你侧重于对于数据可以灵活处理,并且内存足够多,将数据集设置为可迭代对象是明确的选择。
- 是一个非常节省内存,可以记录取值位置,可以直接通过循环next方法取值,但是不直观,操作方法比较单一的数据集。
- 当你的数据量过大,大到足以撑爆内存或者当以节省内存为主选因素时,将数据集设置为迭代器是一个不错的选择。(几百万个数据对象,8g内存是可以承受的)
-
-
利用while循环模拟for循环机制(面试题):
- 将可迭代对象转换成迭代器
l1 = [1,2,3,4,5,6,7,8,9] obj = iter(l1) while True: try: print(next(obj)) except StopIteration: break
-