generator 生成器

1、与普通函数区别

  • 普通函数没有 yield

  • 普通函数调用时立马执行,生成器函数不立即执行, 而是返回一个generator 对象

  • 普通函数调用一次只到遇到return或执行到函数的末尾才返回,生成器到 yield 就返回,调用 next 才会执行 yield 后面的语句,然后到下一个 yield 停止

  • 生成器执行完毕抛出异常 StopIteration

2、实例

def countdown(n):
    print("Countdown from ", n)
    while n > 0:
        print('will exec yield')

        # 调用完 yield 后暂停在这里
        yield n

        # 下次调用 next 时在从上一句回复执行
        print("exec n-= 1")
        n -= 1

if __name__ == '__main__':
    generator = countdown(1)
    print('generator: ', generator)

    try:
        print("execute first next")
        print(next(generator))
    except StopIteration:
        print("over generator")

执行后返回

# 并没有立即执行,而是返回一个 `generator`
generator:  <generator object countdown at 0x104441048>

# 调用 next 才开始执行,并在yield 之后返回
execute first next
Countdown from  1
will exec yield
exec next return:  1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值