# 之前的函数
def fucn():
print(123)
return 456
ret = func()
print(ret)
# 执行此函数,遇到return就结束函数,将数字 456 返回给ret
# 生成器函数: 只要函数中出现 yield 那么他就不是函数,是个生成器函数
def func():
print(1)
print(2)
yield 3,4,5 # 多个值返回的是元组
yield 4
yield 5
ret = func()
print(ret) # 在这打印出的结果是 生成器函数 func 的内存地址
# 生成器函数取值也是通过 next() 和迭代器一样
print(next(ret))
print(next(ret))
print(next(ret)) # 一个 next 对应一个 yield 超出会报错
# 举例 生成器函数的应用
def bun():
for i in range(1,10001):
yield f'{i}包子'
ret = bun()
for i in range(200):
print(next(ret))
for i in range(200)
print(next(ret))
# 多次next包子的序号是按照顺序记录的
def func():
l1 = [1, 2, 3]
yield l1
ret = func()
print(next(ret))
print(next(ret))
print(next(ret))
# yield from 将一个可迭代对象的每一个元素返回给next,节省代码,提升效率 (代替for循环)
def func():
l = [1,2,3,4,5]
yield from l
ret = func()
print(next(ret)) # 1
print(next(ret)) # 2
print(next(ret)) # 3
原文:https://www.cnblogs.com/Agoni-7/p/11061689.html