持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
0 环境
- 编辑器:idea
- 系统版本:win10
- python版本:3.9.6
- 惰性求值
1 迭代器概念
它的好处是降低性能消耗,为啥可以降低呢,因为采用了惰性求值(自行搜索或者看标题目录为0 环境里有),等你要真正需要了再给你,而不是提前都给你准备好,既然有这么个好处,什么样的,怎么用,然后迭代器给出答案了,它的定义是:next函数需要的是迭代器,在分解一下就是,next函数用来迭代可迭代对象。可迭代对象这个是知道的,怎么变成迭代器呢,iter方法可以转换可迭代对象,也就说:next函数需要通过iter方法的转化,才可使用可迭代对象。next(迭代器) --> next(iter(可迭代对象))。
next迭代超出会报错
iter解释如下,有两种方式。
def iter(source, sentinel=None): # known special case of iter
"""
iter(iterable) -> iterator
iter(callable, sentinel) -> iterator
Get an iterator from an object. In the first form, the argument must
supply its own iterator, or be a sequence.
In the second form, the callable is called until it returns the sentinel.
"""
pass
迭代器实例,代码如下:
def iter_demo():
# next函数直接使用可迭代对象,会有报错
# next(list(2,3))
a = list((2, 3, 4))
it = iter(a)
for i in range(len(a)):
print(next(it))
# next(it)
if __name__ == '__main__':
iter_demo()
2 小结
当数据量很大时,并且很消耗内存资源,而且不够豪,当然除了部分很豪的,可以略过,大部分都是会想办法减少消耗开支,就很需要这种惰性求值,等你真正需要的时候,它在给你,有点像分页,可以先类比一下,当然还是有区别的。更通俗的说法,好比书,一本书的数据量很大吧,但是被拆分成很多页后,当我需要第四页的内容,然后撕开书的第四页给你,只是为了好理解,别太钻牛角尖。那它的规则是啥呢,next(迭代器) --> next(iter(可迭代对象))。