具体文章:ALEX的文章 https://www.cnblogs.com/alex3714/articles/5765046.html

串行的并行效果:

 import time

 def consumer(name):
print("%s 准备吃包子啦!" %name)
while True:
baozi = yield print("[%s]包子来了,被[%s]吃了!" %(baozi,name)) # c = consumer("小胡胡") #已经变成生成器,接下来每一步都要用next
# c.__next__()
# a1= "鸡肉馅"
# c.send(a1)
# c.__next__() def producer(name):
c = consumer('A') #已经变成迭代器,接下来都要用next
c2 = consumer('B')
c.__next__()
c2.__next__()
print("老子开始准备做包子啦!")
for i in range(15):
a = ['茴香鸡蛋','茴香肉','韭菜鸡蛋','韭菜肉','白菜粉条鸡蛋','白菜肉','猪肉大葱',\
'牛肉大葱','羊肉胡萝卜','猪肉芹菜','猪肉菠菜','鸡蛋菠菜韭菜','纯肉馅','香菇肉','酸菜馅']
time.sleep(1)
print("[%s]做了1个\033[31;1m[%s]包子\033[0m,分两半一人一半!"%(name,a[i]))
c.send(a[i])
c2.send(a[i]) producer("Tiger")

运行结果:

 A 准备吃包子啦!
B 准备吃包子啦!
老子开始准备做包子啦!
[Tiger]做了1个[茴香鸡蛋]包子,分两半一人一半!
[茴香鸡蛋]包子来了,被[A]吃了!
[茴香鸡蛋]包子来了,被[B]吃了!
[Tiger]做了1个[茴香肉]包子,分两半一人一半!
[茴香肉]包子来了,被[A]吃了!
[茴香肉]包子来了,被[B]吃了!
[Tiger]做了1个[韭菜鸡蛋]包子,分两半一人一半!
[韭菜鸡蛋]包子来了,被[A]吃了!
[韭菜鸡蛋]包子来了,被[B]吃了!
[Tiger]做了1个[韭菜肉]包子,分两半一人一半!
[韭菜肉]包子来了,被[A]吃了!
[韭菜肉]包子来了,被[B]吃了!
[Tiger]做了1个[白菜粉条鸡蛋]包子,分两半一人一半!
[白菜粉条鸡蛋]包子来了,被[A]吃了!
[白菜粉条鸡蛋]包子来了,被[B]吃了!
[Tiger]做了1个[白菜肉]包子,分两半一人一半!
[白菜肉]包子来了,被[A]吃了!
[白菜肉]包子来了,被[B]吃了!
[Tiger]做了1个[猪肉大葱]包子,分两半一人一半!
[猪肉大葱]包子来了,被[A]吃了!
[猪肉大葱]包子来了,被[B]吃了!
[Tiger]做了1个[牛肉大葱]包子,分两半一人一半!
[牛肉大葱]包子来了,被[A]吃了!
[牛肉大葱]包子来了,被[B]吃了!
[Tiger]做了1个[羊肉胡萝卜]包子,分两半一人一半!
[羊肉胡萝卜]包子来了,被[A]吃了!
[羊肉胡萝卜]包子来了,被[B]吃了!
[Tiger]做了1个[猪肉芹菜]包子,分两半一人一半!
[猪肉芹菜]包子来了,被[A]吃了!
[猪肉芹菜]包子来了,被[B]吃了!
[Tiger]做了1个[猪肉菠菜]包子,分两半一人一半!
[猪肉菠菜]包子来了,被[A]吃了!
[猪肉菠菜]包子来了,被[B]吃了!
[Tiger]做了1个[鸡蛋菠菜韭菜]包子,分两半一人一半!
[鸡蛋菠菜韭菜]包子来了,被[A]吃了!
[鸡蛋菠菜韭菜]包子来了,被[B]吃了!
[Tiger]做了1个[纯肉馅]包子,分两半一人一半!
[纯肉馅]包子来了,被[A]吃了!
[纯肉馅]包子来了,被[B]吃了!
[Tiger]做了1个[香菇肉]包子,分两半一人一半!
[香菇肉]包子来了,被[A]吃了!
[香菇肉]包子来了,被[B]吃了!
[Tiger]做了1个[酸菜馅]包子,分两半一人一半!
[酸菜馅]包子来了,被[A]吃了!
[酸菜馅]包子来了,被[B]吃了!

迭代器

可以直接作用于for循环的数据类型有以下几种:

一类是集合数据类型,如list列表tuple元组dict字典set集合str字符串等;

一类是generator(生成器),包括生成器和带yield的generator function。

这些可以直接作用于for循环的对象统称为可迭代对象:Iterable

而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

生成器都是Iterator对象,但listdictstr虽然是Iterable,却不是Iterator

listdictstrIterable变成Iterator可以使用iter()函数:

 >>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True

小结

  1. 凡是可作用于for循环的对象都是迭代对象类型;
  2. 凡是可作用于next()函数的对象都是迭代器类型,它们表示一个惰性计算的序列,不运行就不执行;
  3. 集合数据类型如listdictstr等是迭代对象但不是迭代器,不过可以通过iter()函数获得一个迭代器对象。

并行效果&迭代器的更多相关文章

  1. R︱foreach+doParallel并行+联用迭代器优化内存+并行机器学习算法

    要学的东西太多,无笔记不能学~~ 欢迎关注公众号,一起分享学习笔记,记录每一颗"贝壳"~ --------------------------- 接着之前写的并行算法paralle ...

  2. python迭代器生成器

    1.生成器和迭代器.含有yield的特殊函数为生成器.可以被for循环的称之为可以迭代的.而可以通过_next()_调用,并且可以不断返回值的称之为迭代器 2.yield简单的生成器 #迭代器简单的使 ...

  3. Python学习笔记九:装饰器,生成器,迭代器

    装饰器 本质是函数,装饰其他函数,为其他函数添加附加功能 原则: 1不修改原函数的源代码 2不修改原函数的调用方式 知识储备: 1函数即变量 使用门牌号的例子说明函数,调用方式与变量一致 2高阶函数 ...

  4. python笔记-4(装饰器、生成器、迭代器)

    一.熟练掌握装饰器的原理 (在装饰器学习的过程中,查了看了很多资料,个人感觉走了很多的弯路,这个笔记,分享我的理解,希望能帮助到一些人.本文对装饰器的描述,侧重点是条理与逻辑思路,想通过从无到有的方式 ...

  5. 【python】-- 装饰器、迭代器、生成器

    装饰器 装饰器本质是函数,是用来装饰其他函数,顾名思义就是,为其他的函数添加附件功能的. 一.装饰器原则: 不能修改被装饰函数的源代码 不能修改被装饰函数的调用方式 def logging(): pr ...

  6. Python3基础(4)匿名函数、装饰器、生成器、迭代器、内置函数、json&pickle序列化、软件目录开发规范、不同目录间模块调用

    ---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...

  7. Day4-Python3基础-装饰器、迭代器

    今日内容: 1.高阶函数 2.嵌套函数 3.装饰器 4.生成器 5.迭代器 1.高阶函数 定义: a:把一个函数名当作实参传给函数 a:返回值包含函数名(不修改函数的调用方式) import time ...

  8. Iterator(迭代器)-对象行为型模式

    1.意图 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示. 2.别名 Cursor-游标. 3.动机 一个聚合对象,应该提供一种方法来让别人可以访问它的元素,而又不需暴露它的 ...

  9. 设计模式(十五):Iterator迭代器模式 -- 行为型模式

    1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合. 集合不一定是均一的.图形用 ...

随机推荐

  1. Matlab filter常用函数

    Filtering and Analysis Functions Filtering Function Description fftfilt Filters a signal with a digi ...

  2. Bootstrap入门(2)表格

    Bootstrap入门(四)表格 <table>标签 首先,引入bootstrap的css文件,然后表格内容放在一个class为table的<table>标签中(class=& ...

  3. JS-ES6语法运用

    import导入模块,js的模块化开发 浏览器使用ES6模块化语法(使用module时js代码自动运行严格模式): <script type="module" src=&qu ...

  4. rabbitmq 命令行与控制台

    命令行和管控台 rabbitmqctl stop_app 关闭应用 rabbitmqctl start_app 打开应用 rabbitmqctl status 节点状态 rabbitmqctl add ...

  5. python正则元字符的含义

    练习的时候使用linux+ipython,ipython安装 python的元字符 # 元字符 :#  .   ^   $   *   +   ?   {}  []   \   |   () 注:\w ...

  6. 虚拟机下的Linux连接校园网上网问题

    安装了CentOS7后,本地Windows系统连接用的是校园网,虚拟机用的是桥接模式,无法上网. 解决的办法是:找到连接的校园网的网卡,给虚拟机的VMnet8共享. 步骤:打开[网络和共享中心]-[更 ...

  7. 主库增加表空间导致DG同步失败

    由于主库表空间不足,同事给表空间增加数据文件,第二天收到反馈说备库未同步. 1.主.备查看归档序列号,发现主.备归档正常同步. SQL>archive log list 2.在主库端查询v$ar ...

  8. SpringMVC的三种处理器适配器

    SpringMVC具有三种处理器适配器,他们分别是BeanNameUrlHandlerMapping.SimpleControllerHandlerAdapter.ControllerClassNam ...

  9. Flutter 中的常见的按钮组件 以及自 定义按钮组件

    一.Flutter 中的按钮组件介绍   Flutter 里有很多的 Button 组件很多,常见的按钮组件有:RaisedButton.FlatButton.   IconButton.Outlin ...

  10. java 面试架构篇

    1.非功能需求会考虑哪些? 可用性.扩展性.性能: 2.有没有遇到过建了索引反而变慢的情况? 3.从哪些角度去设计系统? 4.代码中使用过的设计模式?