python笔记 迭代器

64 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

0 环境

  • 编辑器:idea
  • 系统版本:win10
  • python版本:3.9.6
  • 惰性求值

1 迭代器概念

它的好处是降低性能消耗,为啥可以降低呢,因为采用了惰性求值(自行搜索或者看标题目录为0 环境里有),等你要真正需要了再给你,而不是提前都给你准备好,既然有这么个好处,什么样的,怎么用,然后迭代器给出答案了,它的定义是:next函数需要的是迭代器,在分解一下就是,next函数用来迭代可迭代对象。可迭代对象这个是知道的,怎么变成迭代器呢,iter方法可以转换可迭代对象,也就说:next函数需要通过iter方法的转化,才可使用可迭代对象。next(迭代器) --> next(iter(可迭代对象))。

image.png

next迭代超出会报错 image.png

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(可迭代对象))。