比如,斐波那契数列:1,1,2,3,5,8,13,21,34....
用列表生成式写不出来,但是我们可以用函数把它打印出来:
def fib(number):
n, a, b = 0, 0, 1
while n < number:
print(b)
a, b = b, a + b
n = n + 1
return 'OK!'
print(fib(5))
结果:
1
1
2
3
5
OK!
我们可以看出从第一个元素开始,推算出后续任意的元素。很像generator。
要把fib函数变成generator,只需要把 print(b)改为 yield b就可以了:
def fib(number):
n, a, b = 0, 0, 1
while n < number:
yield b
a, b = b, a + b
n = n + 1
return 'OK!' print(fib(5))#<generator object fib at 0x105606ca8>
注意:
这里难理解的就是generator和函数的执行流程是不一样的。
函数是顺序执行,遇到return语句或者最后一行函数语句就
返回。
注意:函数创建一次生成一个生成器,所以我们会将创建的生
成器赋值给一个变量。如果直接用函数本身这个生成器,
我们没用一次生成一个新的生成器对象,所以,我们一
般都将创建的生成器赋给一个变量。
generetor的函数,在每次调用 next()的时候执行,遇到
yield语句返回,再次执行时从上次返回的yield语句处继续
执行。

最新文章

  1. Hadoop Pig简介、安装、试用
  2. 【移动适配】移动Web怎么做屏幕适配(一)
  3. Choosing proper innodb_log_file_size
  4. android 获取前台进程
  5. Mysql 数据库的介绍
  6. 【IOS 开发】Object - C 语法 之 流程控制
  7. c#实战开发:以太坊钱包快速同步区块和钱包卡死解决方案 (三)
  8. docker 基础之监控
  9. 腾讯技术分享:GIF动图技术详解及手机QQ动态表情压缩技术实践
  10. 一个applicationContext 加载错误导致的阻塞解决小结
  11. getComputedStyle()用法详解
  12. WordPress版微信小程序2.2.0版发布
  13. PHPsocket、CURL、File_get_contents采集
  14. 未解决:长字符串含&hellip;
  15. python 豆瓣验证码识别总结
  16. asp.net MVC之Result过滤器浅析
  17. Zabbix 3.0编译安装
  18. C#跳转网页7种方法
  19. HDU 2159 FATE 完全背包
  20. Redis(七)-- SpringMVC整合Redis集群

热门文章

  1. 【Arcgis Server】程序动态发布MXD到Arcgis Server
  2. CSDN管理员看过来
  3. 理解Android ANR的触发原理(转)
  4. 在XX公司工作第二天,维护已有代码
  5. OTG识别原理
  6. 学习Opencv 2.4.9 (一)---Opencv + vs2012环境配置
  7. 设置清除html5页面缓存
  8. HTML5_路径
  9. 优化tomcat配置(从内存、并发、缓存)优化
  10. spring依赖注入(反转控制)