python 中的迭代器和生成器

python 中的迭代器和生成器

可迭代对象

可以被for迭代的对象,都是可迭代对象

对象有__iter__方法的,都是可迭代对象。(__iter__方法要求返回值必须是一个 “迭代器” (返回值必须有__next__方法))

迭代就要掉用__next__方法

常见的可迭代对象:
list	str	  tuple

迭代器

  • 是特殊的可迭代对象

  • 可以被for迭代,for 迭代迭代器时,会执行__next__方法

  • 必须有__iter____next__方法

  • 核心:通过__next__方法记住迭代的位置,有没有迭代完毕

  • __iter__方法要求返回值必须是一个 “迭代器” (返回值必须有__next__方法)

生成器

场景一:我需要999999999999999个数字,一下子把1~999999999999999放到一个list中

场景二:我需要999999999999999个数字,你需要1 的时候,我生成1,你需要 2 的时候,我生成 2 … 生成2的时候,前面的会被收回

生成器是什么?

因为迭代器手工实现比较麻烦 所以Python提供了生成器对象

生成器的目的

目的:获得迭代器对象(非常高效)

  • 生成器是特殊的迭代器,迭代器是特殊的可迭代对象
如何创建生成器对象?

通过 yield 关键字

yield关键字:
  • 记住函数执行的状态

  • 如下代码:

    def f():
        yield 1
        yield 2
    g = f() # g是一个生成器对象
    next(g)
    
yield 和return 的区别

yield 跳出会记住执行的位置,暂时跳出,还回进来

return 直接跳出函数,不会再执行

生成器为什么会省内存?

是因为有:__next__

生成器是为了快速获得含有 __iter____next__的方法

你可能感兴趣的:(python,python,生成器)