生成器

 

 

生成器是一种特殊的迭代器。

 

 

一、创建生成器

方式一:生成式表达式

就是解析语法,最外面用小括号。见前面。这种方式用到比较少

 

方式二:通过yeild方式

就是创建一个打印数字的函数,然后print语句替换掉。【例1】

一个函数只要有yeild就不是函数了,而是生成器的模板。调用函数的语句是创建生成器。就可以使用for循环调用了。【例2】

因为生成器是一种迭代器,所以一定可以用for循环迭代。【例2】

 

 

 

例1:创建斐波那契数列的生成器。

第一步,建立一个函数,打印出斐波那契数列

 

 

结果:

 

步骤2:把print()语句改掉。

 

结果:

 

什么也没输出。因为这已经不是一个函数了,而是一个生成器模板。

 

 

例2:

 

结果:

 

 

二、生成器的调用原理

因为生成器是一种迭代器。for循环的原理就是,每次调用next(迭代器)来取一个值。我们用next()进行调试。

yeild的特点是把函数暂停,当下一次取值的时候会从暂停的地方继续走,而不是从头走。

 

 

 

结果:

 

当执行obj = fib(10)的时候,就会把10传给fib(n)。创建一个生成器对象。但是不执行内容。

当第一次执行next()的时候,程序从第2行执行到底8行,所以会打印出“11111111”和“22222222222”,然后返回a= 0,打印输出0。这时候,

当第二次调用next()的时候,程序是从第9行开始执行,而不是从头执行。所以打印的是“333333333”。

 

即:第一次从头执行,后面的都是从上次暂停的地方执行。

 

 

三、生成器的用处

可以节省空间。

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值