65 生成器函数设计要点

包含 yield 语句的函数可以用来创建生成器对象,这样的函数也称为生成器函数。yield 语句与 return 语句的作用相似,都是用来从函数中返回值。return 语句一旦执行会立刻结束函数的运行,而每次执行到 yield 语句返回一个值之后会暂停或挂起后面代码的执行下次通过生成器对象的 _ _ next _ _() 方法、内置函数 next()、for 循环遍历生成器对象元素或其他方式显示 “索要” 数据时恢复生成器具有惰性求值的特点,适合大数据处理。

# 使用生成器来生成斐波那契数列
def func():
    a, b = 1, 1  # 序列解包,同时为多个元素赋值
    while True:
        yield a  # 暂停执行,需要时再产生一个新元素
        a, b = b, a + b  # 序列解包,继续生成新元素


g = func()  # 创建生成器对象

for i in range(10):  # 斐波那契数列中前10个元素
    print(g.__next__(), end=' ')

print()

for i in func():  # 斐波那契数列中第一个大于100的元素
    if i > 100:
        print(i)
        break

g = func()  # 创建生成器对象
print(next(g))  # 使用内置函数 next() 获取生成器对象中的元素
print(next(g))  # 每次获取新元素时,由 yield 语句生成
print(g.__next__())  # 也可以调用生成器对象的 __next__() 方法
print(g.__next__())

在这里插入图片描述

def func():
    yield from 'hello'  # 使用yield表达式创建生成器


g = func()
print(next(g))
print(next(g))
for i in g:  # 输出剩余元素
    print(i, end=' ')

在这里插入图片描述

def func():
    yield 1
    yield 2
    yield 3


x, y, z = func()  # 生成器对象支持序列解包
print(x, y, z)

在这里插入图片描述

Python 标准库 itertools 提供了一个 count(start, step) 函数,用来连续不断地生成无穷个数,这些数中的第一个数是 start (默认为0),相邻两个数的差是step (默认为1)。

# 使用生成器模拟标准库 itertools 中的 count() 函数
def count(start, step):
    s = start
    while True:  # 无穷循环
        yield s  # 返回一个数,暂停执行,等待下一次索要数据
        s += step


x = count(3, 5)
for i in range(10):
    print(next(x), end=' ')

print()

for i in range(10):
    print(next(x), end=' ')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我还记得那天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值