Generator函数与迭代协议

Generator函数是一种特殊类型的函数,它可以生成迭代器对象。与普通函数不同的是,当调用一个Generator函数时,并不会立即执行函数体内的代码,而是返回一个迭代器对象。通过调用迭代器对象的next()方法可以依次执行Generator函数的代码,并在每次执行时返回一个值。

生成器函数使用yield关键字来定义生成器的返回值,每次调用yield语句时,生成器函数会产生一个值,并在此处暂停执行,等待下一次调用next()方法继续执行。

迭代协议是一种约定,规定了一个对象必须具有一个__iter__()方法,该方法返回一个迭代器对象。迭代器对象必须具有一个__next__()方法,在每次调用next()方法时,返回下一个值。当迭代器对象没有更多的值可供返回时,它应该抛出一个StopIteration异常,以通知调用者迭代已经结束。

Generator函数实现了迭代协议,因此生成的迭代器对象可以通过for循环或者显式调用next()方法来逐个获取生成器函数产生的值。在每次调用next()方法时,Generator函数会从上次暂停的位置继续执行,直到遇到下一个yield语句或者函数结束。

以下是一个使用Generator函数生成斐波那契数列的例子:

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

fib = fibonacci()
for i in fib:
    if i > 1000:
        break
    print(i)

这个Generator函数定义了一个无限循环,每次调用yield语句时,产生斐波那契数列中的下一个值。通过for循环遍历生成的迭代器对象,可以不断获取斐波那契数列中的值,直到某个值大于1000时,结束循环。

  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Shero.李建业

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

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

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

打赏作者

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

抵扣说明:

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

余额充值