生成器generator

定义:一边循环一边计算的机制。

列表元素可以按某种算法推算出来,在循环的过程中不断推算出后续的元素。

1.创建一个generator的办法

①列表生成式的【】改为()


要想打印出generator的每一个元素------用next()函数。


generator保存的是算法。next(g)没有更多元素时,抛出StopIteration的错误。

改进next():更简洁的方法-------for循环。


2.目标:斐波拉契数列(Fibonacci):除第1,2个数,任何1个数由前2个数相加得到:

1,1,2,3,5,8,13,21,34,...

法1:定义斐波拉契函数(print(b))


注:若第5行代码用了Tab缩进会报错。打两个空格就好。

调用


法2:生成器 print(b)改为yield b

   注:定义generator的另一种方法:

函数定义中包含yield关键字,该函数就不是一个普通函数,而是生成器。

调用

       

           


3.说明yield的中断属性及驾驭策略


注:odd是生成器,遇到yield就中断,下次又从上次返回的yield语句处继续执行。实际中,大多用for迭代而不用next()。



for迭代生成器的局限性:拿不到生成器的return语句的返回值,譬如:


改进:


Python编码中try语法是用来捕获由Python或程序本身引发的异常,如果不想在异常发生时结束程序,只需在try里捕获它,

//当程序运行是会捕获一个错误并执行except后面的代码。


     

yield L的顺序也很重要,当yield L位于循环末尾时,会出错。应位于循环内部的最前端。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值