4. 生成器函数

什么是生成器

生成器是能够动态提供数据的可迭代对象。

特点:

现用现生成,节省内存。

python创建生成器的方式有三种:

  1. 生成器函数
  2. 生成器表达式
  3. 生成器类

生成器函数

什么是生成器函数

含有yield语句的函数是生成器函数,此函数被调用将返回一个生成器对象。

生成器对象是一个可迭代对象。

yiled语句

作用

yield 语句仅在定义生成器函数的内部使用,使得此函数不再是普通函数,而是生成器函数。 生成器函数被调用将返回一个生成器对象。

语法

yield 表达式
# 或
yield from 表达式(此表达式必须返回一个可迭代对象或生成器)

生成器函数说明

示例

# 生成器函数示例

def my_generator():
    print('生成器函数开始:')
    yield 1
    yield 2
    yield 5
    print('生成器函数结束!')

generator_obj = my_generator()  # generator_obj 绑定生成器对象

print(generator_obj)
for x in generator_obj:
    print('x:', x)

上述函数 my_generator() 调用后,返回的是生成器对象,可以使用迭代器或 for 语句取值。

生成器函数调用,函数内部的语句并不会执行,只有向生成器对象创建的迭代器取值时,内部的语句才会递进运行,当遇到 yield 语句就会停止执行并将值返回 给next(it) 函数。下一次调用 next(it) 时在从上次的yield 语句处继续执行。

生成器函数执行完毕会引发 StopIteration 异常通知。

yield from 示例

# yield from 语句示例

def my_generator():
    yield 1
    yield from [2, 3, 4, 5]
    yield 6

for x in my_generator():
    print(x)