yield是什么?作用是什么?
yield是一个关键字,是用来创建生成器的核心工具。
yield = 让函数可以分段执行,每次返回一个值,函数不结束,暂停住,等下次再继续跑。

一个函数只要有yield,就是生成器函数

生成器函数的特点有哪些?
当函数执行到 yield 语句时,它会暂停执行,并返回 yield 后面的值。
此时,函数的所有局部变量和执行位置都会被保存下来。
当下一次请求值时(例如,通过 next() 函数或 for 循环),函数会从上次暂停的地方精确地恢复执行,就像从未中断过一样。

yield示例

用法:
先执行代码,然后依次去掉最后两次的print(next(g))注释,再执行。

代码:

# 带 yield 的函数 = 生成器函数
def my_generator():
    print("第一段")
    yield 1         # 返回 1,暂停

    print("第二段")
    yield 2         # 返回 2,暂停

    print("第三段")
    yield 3         # 返回 3,暂停


g = my_generator()  # 不执行!只创建生成器

print(next(g))

# print(next(g))
# print(next(g))

函数遇到yield就会暂停,执行next()方法就可以触发,for循环的本质就是循环调用next()。

不用for循环实现循环调用next()的示例

代码:

# 这是一个生成器函数
def gen():
    yield 1
    yield 2
    yield 3


# 1. 获取生成器对象
g = gen()

# 2. 手写 while 循环 + try 捕获结束
while True:
    try:
        # 手动调用 next()
        value = next(g)
        print(value)  # 处理数据

    # 3. 没有更多数据了,退出循环
    except StopIteration:
        print("结束")
        break
生成器函数和生成器是一回事吗?

不是。

这个是生成器函数:
def my_generator():

这个g是生成器:
g = my_generator()
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐