生成器generator

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

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

1.创建一个generator的办法

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

生成器generator

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

生成器generator

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

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

生成器generator

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

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

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

生成器generator

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

调用

生成器generator

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

生成器generator

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

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

调用

生成器generator       

生成器generator           


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

生成器generator

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

生成器generator


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

生成器generator

改进:

生成器generator

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

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

生成器generator

     生成器generator

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

生成器generator