生成器定义理解,直接上代码:

#!/user/bin env python
# author:Simple-Sir
# time:20181005
# 生成器
'''
# 列表生成式
a=[i for i in range(10)]
print(a) def fun_add(a,b):
return a+b
b = [fun_add(i,j) for i in range(1,4) for j in range(4,7)]
print(b)
''' '''
生成器: 一边循环一边计算的机制,就叫生成器generator
循环一次,计算一次,不需要先循环完再计算。
生成器只有在调用时才会生成相应的数据,
只记录当前位置的值
只有一个__next__方法 :获取下一个位置的值
'''
'''
# 生成器方式一:列表生成式
a = (i*2 for i in range(10))
print(a.__next__())
''' '''
# 生成器方式二:函数做生成器
# 斐波拉契数列,除了第一个和第二个外,任意一个数都由前两数相加得到。
def fblq(max):
n,a,b=0,0,1
# n=0
# a=0
# b=1
while n<max:
# print(b)
yield b # 将函数变成生成器,想要返回的值加yield,yield是一个类似return 的关键字
a,b = b,a+b
# 相当于 ==>
# t = (b,a+b) -->(1,0+1)
# a=t[0] -->1
# b=t[1] -->0+1
# 而不是 a=b,b=a+b
n += 1
return '执行完成' #异常消息
f = fblq(10)
print('打印第一个位置值',f.__next__())
print('打印下一个位置值',f.__next__())
print('打印下一个位置值',f.__next__())
print('开始循环打印')
''' '''
# 循环打印
for i in f:
print(i)
''' '''
g = fblq(3)
while True:
try:
x=next(g)
print('g',x)
except StopIteration as e:
print('错误信息',e.value)
break
''' '''
def scq_f():
for i in range(5):
for j in range(5):
k=i+j
#print(k)
yield k #关键点,将函数变成生成器,即将函数保持中断状态
return '错误信息'
# f = scq_f()
# for i in f:
# print(i)
f=scq_f() while True:
try:
x=next(f) # 即:f.__next__()
print('f',x)
except StopIteration as e:
print('错误信息:',e.value) #获取scq_f的return值
break '''

最新文章

  1. fonts.googleapis.com 加载慢的解决方法
  2. php 使用 curl 发送 post 数据
  3. sql install error
  4. 理解 AngularJS 的 Scope
  5. [Linux] 学习笔记之安装学习环境(sshd, lrzsz)
  6. Jenkins 2.26 发布,可扩展的持续集成引擎
  7. CentOS 问题集锦
  8. 使用Struts+Hibernate开发学生信息管理系统
  9. rotate array 旋转数组
  10. Python Paramiko模块安装和使用
  11. JS回车键处理
  12. Jersey(1.19.1) - Client API, Security with Http(s)URLConnection
  13. JQ动画,背景透明度
  14. shell加法
  15. hdu - 2586 How far away ?(最短路共同祖先问题)
  16. jvm内存模型的理解
  17. Windows中根据端口定位持有者程序
  18. Kudu存储实战笔记
  19. Markdown语法大全
  20. Java多线程:Java内存模型

热门文章

  1. 远程连接mysql库问题
  2. ubuntu 使用mysql
  3. 10.Object类
  4. 第三届“传智杯”全国大学生IT技能大赛(初赛A组)题解
  5. Declarative Pipeline 基础语法
  6. 漫谈IRP
  7. PSpiceAA-高级分析例程
  8. 简单聊聊mysql的脏读、不可重复读
  9. npm ERR! Error: EPERM: operation not permitted
  10. 【九度OJ】题目1201:二叉排序树 解题报告