一、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结合一起只用。重新执行函数。

day4 使用yield实现单线程的更多相关文章

  1. python学习,day4:生成器,通过yield实现单线程情况下的并发运算

    首先了解一个斐波那契函数的实现,了解下生成器的工作流程 # coding=utf-8 # Author: RyAn Bi def fib(max): n,a,b=0,0,1 while n < ...

  2. 通过生成器yield实现单线程的情况下实现并发运算效果(异步IO的雏形)

    一.协程: 1.生成器只有在调用时才会生成相应的数据 2.调用方式有 " str__next__.()   str.send() ", 3.并且每调用一次就产生一个值调用到最后一个 ...

  3. python2.0 s12 day4

    python2.0 s12 day404 python s12 day4 TengLan回顾上节内容 05 python s12 day4 迭代器原理及使用 本节大纲介绍: 1.迭代器&生成器 ...

  4. Python之路 - Day4 - Python基础4 (新版)

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

  5. Day5-python基础之函数(二)

    生成器 迭代器 装饰器 模块   来个需求,一个列表中所有元素都+1 1.最容易想到的方法 for循环,找列表索引,对应每个值+1 list_old = [1,2,3,4,5,6,7,8,9] for ...

  6. Python 从零学起(纯基础) 笔记 之 迭代器、生成器和修饰器

    Python的迭代器. 生成器和修饰器 1. 迭代器是访问集合元素的一种方式,从第一个到最后,只许前进不许后退. 优点:不要求事先准备好整个迭代过程中的所有元素,仅仅在迭代到某个元素时才计算该元素,而 ...

  7. python3.5-day5_迭代器_生成器_装饰器_模块

    笔者QQ 360212316 迭代器&生成器 生成器: 一个函数调用返回一个迭代器,那这个函数叫做生成器,如果函数中包含yield语法,那么这个函数就会变成生成器 生成器的特点: 1.生成器必 ...

  8. Python3

    1.上节内容回顾 递归: 明确的结束条件 问题规模每递归一次都应该比上一次的问题规模有所减少 效率低 高阶函数 文件: rb.wb.ab 一般用在不同系统之间传数据,和传视频流的时候用到,一般以这种形 ...

  9. Python之路-python(装饰器、生成器、迭代器、Json & pickle 数据序列化、软件目录结构规范)

    装饰器: 首先来认识一下python函数, 定义:本质是函数(功能是装饰其它函数),为其它函数添加附件功能        原则:        1.不能修改被装饰的函数的源代码.        2.不 ...

随机推荐

  1. 批量修改历史commit的用户名user.name邮箱user.email

    配置当前的用户名邮箱可以当前项目配置或者全局配置. 仅当前项目配置: git config user.name 'your-user-name' git config user.email 'your ...

  2. CSU 多校训练第二场 J Pinemi Puzzles

    传送门:http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2279 题意: 代码: #include <set> #incl ...

  3. P2596 [ZJOI2006]书架 && Splay 区间操作(三)

    P2596 [ZJOI2006]书架 题目描述 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书, ...

  4. centos7.2的yum安装mysql和修改初始密码

    一.centos7.2安装mysql CentOS 7之后的版本yum的默认源中使用MariaDB替代原先MySQL,因此安装方式较为以往有一些改变: 下载mysql的源 wget http://de ...

  5. [LeetCode] 数学计算模拟类问题:加法,除法和幂,注意越界问题。题 剑指Offer,Pow(x, n) ,Divide Two Integers

    引言 数学计算的模拟类题目,往往是要求实现某种计算(比如两数相除),实现的过程中会有所限定,比如不允许乘法等等. 这类题目首先要注意计算过程中本身的特殊情况.比如求相除,则必须首先反映过来除数不能为0 ...

  6. VS Code 配置删除左边单词快捷键(同Sublime 和 Atom)

    VS Code 中删除一行的快捷键默认是 cmd + shift + k,或者使用简介 cmd + x,对于一个长期使用 Sublime 和 Atom 的程序猿来说,在VS Code 上删除行,特别是 ...

  7. JS数组---转及补充--

    javascript之数组操作 1.数组的创建 var arr=Array();//写的角标数及直接写角标对应的内容简写 var arr=Array("我","爱&quo ...

  8. 怎样在hibernate的HQL语句中使用mysql 的自定义函数?

    问题:怎样在hibernate中使用mysql的函数? 1.hibernate支持原生态的sql语句查询,使用session.createSQLQuery()创建查询对象: 2.怎样在hql中使用my ...

  9. 算法专题-STL篇

    这篇文章着重记录c++中STL的用法.主要粗略的介绍其用法,以知识点的形式呈现其功能,不会深入源码分析其工作原理. 排序和检索. sort(a,a+n),对a[0]往后的n个元素(包括a[0])进行排 ...

  10. [洛谷P3228] [HNOI2013]数列

    洛谷题目链接:[HNOI2013]数列 题目描述 小T最近在学着买股票,他得到内部消息:F公司的股票将会疯涨.股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为N.在疯涨的K天中小T观察到: ...