生成器和生成器函数

一、生成器

1. 定义:

能够动态(循环一次计算一次返回一次)提供数据的可迭代对象。

2. 作用:

在循环过程中,按照某种算法推算数据,不必创建容器存储完整的结果,从而节省内存空间。数据量越大,优势越明显。
以上作用也称之为延迟操作或惰性操作,通俗的讲就是在需要的时候才计算结果,而不是一次构建出所有结果。

二、生成器函数

1. 定义:

含有yield语句的函数,返回值为生成器对象。

2. 语法:

def 函数名():
…
yield 数据
…
    -- 调用:
     for 变量名 in 函数名():
          语句

3. 说明:

  • 调用生成器函数将返回一个生成器对象,不执行函数体。
  • yield翻译为”产生”或”生成”

4. 执行过程:

  1. 调用生成器函数会自动创建迭代器对象。
  2. 调用迭代器对象的next()方法时才执行生成器函数。
  3. 每次执行到yield语句时返回数据,暂时离开。
  4. 待下次调用next()方法时继续从离开处继续执行。

5. 原理:

  • 将yield关键字以前的代码放在next方法中。
  • 将yield关键字后面的数据作为next方法的返回值。

三、内置生成器

枚举函数enumerate

  • 语法:
    for 变量 in enumerate(可迭代对象):
    语句
    for 索引, 元素in enumerate(可迭代对象):
    语句
  • 作用:遍历可迭代对象时,可以将索引与元素组合为一个元组。

zip

  • 语法:
    for item in zip(可迭代对象1, 可迭代对象2….):
    语句
  • 作用:
    将多个可迭代对象中对应的元素组合成一个个元组,生成的元组个数由最小的可迭代对象决定。

四、生成器表达式

  • 定义:用推导式形式创建生成器对象。
  • 语法:变量 = ( 表达式 for 变量 in 可迭代对象 [if 真值表达式] )

你可能感兴趣的:(生成器和生成器函数)