定义:一边循环一边计算的机制。
列表元素可以按某种算法推算出来,在循环的过程中不断推算出后续的元素。
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位于循环末尾时,会出错。应位于循环内部的最前端。