一、yield生成器(yield)

yield用来结束while循环,并且能够保持之前循环的状态,下一次调用的时候直接从yield开始执行,执行yield后面的程序,并且重新进行循环;另外,yield还可用来接收参数,接收send()传递来的参数,并赋给一个变量。

import time
#导入time模块,用于给生产者生成包子定义时间,比如银行处理完成之后告诉用户信息
def consumer(name):
#消费者模块
print("准备吃包子了!....")
while True:
#循环,死循环,可以使用yield来处理,并且保持在某一个状态
baozi = yield
#使用yield来接收send()传递过来的参数,yield与send()结合使用
print("包子[%s]来了,被[%s]吃了!" %(baozi,name)) def producer(name):
#定义生成这模型
c = consumer("A")
#消费者来买包子
c2 = consumer("B")
c.__next__()
#调用consumer()函数
c2.__next__()
print("老子开始做包子啦!...")
for i in range(,):
time.sleep()
#生产者每秒钟做两个包子
print("做了2个包子!")
c.send(i)
#把生产者生成的包子传递给yield
c2.send(i) producer("alex")

上面,我们导入了时间time模块,time.sleep()让程序停止一定时间。上面代码消费者吃包子,生产者生成包子,并且生成了包子之后发给消费者(send())来传递,消费者中的yield来接收。这样就能够实现,生产者生成包子,并且把包子传递给消费者,实现了两个函数之间的关联。没有再次调用函数就实现了两个函数之间的关联。

上面程序运行结果如下:

准备吃包子了!....
  准备吃包子了!....
  老子开始做包子啦!...
  做了2个包子!
  包子[1]来了,被[A]吃了!
  包子[1]来了,被[B]吃了!
  做了2个包子!
  包子[2]来了,被[A]吃了!
  包子[2]来了,被[B]吃了!
  做了2个包子!
  包子[3]来了,被[A]吃了!
  包子[3]来了,被[B]吃了!
  做了2个包子!
  包子[4]来了,被[A]吃了!
  包子[4]来了,被[B]吃了!
  做了2个包子!
  包子[5]来了,被[A]吃了!
  包子[5]来了,被[B]吃了!
  做了2个包子!
  包子[6]来了,被[A]吃了!
  包子[6]来了,被[B]吃了!
  做了2个包子!
  包子[7]来了,被[A]吃了!
  包子[7]来了,被[B]吃了!
  做了2个包子!
  包子[8]来了,被[A]吃了!
  包子[8]来了,被[B]吃了!
  做了2个包子!
  包子[9]来了,被[A]吃了!
  包子[9]来了,被[B]吃了!

我们在使用while循环的时候,可以使用yield终止循环,当我们想再次运行的时候只需调用即可,程序会记住上一次运行的位置,在系统里面保存,当下一次运行的时候,从yield开始执行。

上面是yield执行函数的过程,第一次遇到yield的时候退出,并返回yield后面的返回的结果;第n>1次循环的时候从yield这里开始这行,先执行yield后面的语句,然后在重新执行while循环,再次遇到yield时终止循环。我们知道,yield也可以接收参数,但是要与send结合一起只用。重新执行函数。

最新文章

  1. 使用Azure REST API创建虚拟机
  2. 常见的三种Web服务架构
  3. listview加载网络图片
  4. 远程连接MySQL 不允许
  5. 看透SpringMVC源代码分析与实践 Markdown记录
  6. ng-csv 异步数据下载
  7. Python学习之旅(三十二)
  8. mysql密码的查看/修改
  9. spring xml的配置
  10. Node.js学习笔记(2)--提交表单
  11. (转)微信公众平台开发教程(七)Session处理
  12. 使用JavaScript获取select元素选中的value和text
  13. linux设置容器(中间件)开机自启
  14. 部署Centos7
  15. C语言中单引号和双引号
  16. python 爬虫系列07-天气爬虫
  17. 神秘常量!用0x077CB531计算末尾0的个数,32位数首位相连
  18. hdu1392凸包裸题
  19. (四)Mybatis总结之接口映射
  20. yum---rpm软件包管理器

热门文章

  1. 【莫队】【P3901】 数列找不同
  2. 洛谷P1012 拼数
  3. python 分享文件
  4. STL源码分析-priority_queue
  5. Jenkins+SVN+Maven发布项目
  6. poj 3636
  7. Java 注解全面解析
  8. 论文里有公式?用texlive+texstudio(windows下)
  9. Oracle解锁scott账户
  10. 数组中的each 和 jquery 中的 each