迭代器&生成器&yield异步
迭代器
#迭代器是访问集合元素的一种形式,迭代器从集合的第一个元素开始访问,直到所有的元素被访问
# 结束才结束,迭代器只能往前访问,不能往后访问,比如你先访问1,在访问2,在访问3.如果已经
# 访问到3了,你就不能访问2了;迭代器仅仅在迭代到某个元素才计算该元素的值,而在访问之前
# 或者之后,该元素可以不存在或者被销毁,这个特点使得他适合于遍历一些巨大的或者无限的集合
#迭代器仅仅有一个方法next name = iter(['a','b','c'])
print(type(name)) # <class 'list_iterator'>
#迭代器是不能这样的访问的
# print(name[1]) #迭代器只能这样访问 print(name.__next__())
# a
print(name.__next__())
# b
ret = name.__next__()
print(ret)
# c #迭代器只能往后取,不能往前取,而且一次只能取一个值
#只能从头到尾依次访问
#便于循环比较大的数据集合,节省内存 生成器
#生成器:如果调用一个函数,返回的是是一个迭代器,那么这个函数就叫做生成器
# 如果函数中包含yield语法,那这个函数就会变为生成器,返回一个迭代器 def cash_money(amount):
while amount >= 0:
amount -= 100
yield 100 #这里的yield就是返回一个值,和以前的return是一样的
print('我又来取钱了!') #cash_money这个函数就是一个生成器generator,返回的值就叫做迭代器
atm = cash_money(400)
print(type(atm))
print(atm.__next__())
print(atm.__next__()) print('交个大保健。。。。。')
print(atm.__next__()) #生成器的作用就是实现异步 yield
import time
def eator(name):
print("[%s] 我要来吃包子了。。。" %(name))
while True:
baozi = yield
print("包子[%s]来了,[%s]要吃包子了" %(baozi,name))
def producer(ddddddd):
c1 = eator('A')
c2 = eator('B')
c1.__next__()
c2.__next__()
print('老子要来做包子了。。。。')
for i in range(5):
time.sleep(2)
print('做了两个包子。。。')
c1.send(i)
c2.send(i)
producer('Bob')d
迭代器&生成器&yield异步的更多相关文章
- Python入门之迭代器/生成器/yield的表达方式/面向过程编程
本章内容 迭代器 面向过程编程 一.什么是迭代 二.什么是迭代器 三.迭代器演示和举例 四.生成器yield基础 五.生成器yield的表达式形式 六.面向过程编程 ================= ...
- day4 内置函数 迭代器&生成器 yield总结 三元运算 闭包
内置函数: 内置函数 # abs()返回一个数字的绝对值.如果给出复数,返回值就是该复数的模. b = -100 print(b) print(abs(b)) # all() 所有为真才为真,只要有一 ...
- Two---python循环语句/迭代器生成器/yield与return/自定义函数与匿名函数/参数传递
python基础02 条件控制 python条件语句是通过一条或多条语句的执行结果(Ture或者False)来执行的代码块 python中用elif代替了else if,所以if语句的关键字为:if- ...
- 理解迭代器,生成器,yield,可迭代对象
原文:https://foofish.net/iterators-vs-generators.html 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Gen ...
- 迭代器,生成器,yield,yield from理解
迭代器 说到迭代器就得想说可迭代对象Iterable,实现了__iter__()方法的对象都是可迭代对象,例如很多容器,list ,set, tuples.使用iter方法可以把一个可迭代对象变成迭代 ...
- 迭代器 生成器 yield
iter 迭代iterable 可迭代的 iterator迭代器 dir函数查看一个数据类型内部含有哪些方法 两边带着双下划线的方法叫做"魔术方法","双下方法" ...
- 迭代器,生成器(generator)和Promise的“微妙”关系
需要Promise源码版的朋友:传送链接 本文主要讲述(iterator)和生成器*/yield之间的联系和各自的用法,以及生成器的高配版本aysnc/await的使用. 大纲: 迭代器(iterat ...
- python迭代器生成器
1.生成器和迭代器.含有yield的特殊函数为生成器.可以被for循环的称之为可以迭代的.而可以通过_next()_调用,并且可以不断返回值的称之为迭代器 2.yield简单的生成器 #迭代器简单的使 ...
- day04 装饰器 迭代器&生成器 Json & pickle 数据序列化 内置函数
回顾下上次的内容 转码过程: 先decode 为 Unicode(万国码 ) 然后encode 成需要的格式 3.0 默认是Unicode 不是UTF-8 所以不需要指定 如果非要转为U ...
随机推荐
- js读取解析JSON类型数据
原文地址:http://www.ablanxue.com/prone_3691_1.html JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立 ...
- Fragment之介绍(转)
http://www.cnblogs.com/plokmju/p/3239265.html 前言 开门见山开篇名义,本篇博客将讲解一下Android中Fragment的内容,必要的地方会提供相应的演示 ...
- 运行quectel EC20 module example data
environment setting are as below: 1. ubuntu 14.04, linux kernel 4.4,OpenLinux(QuecLinux) 2. module: ...
- 自己写的jQuery放大镜插件效果(一)(采用一张大图和一张小图片的思路)
这个思路的方法会带来一个小问题,就是当鼠标放到小图上去时,会开始加载大图片,网速不佳的时候,会出现加载慢的情况.但是放大的效果和你所给出的大图片的清晰度是一样的. 先看效果图: html代码: < ...
- javascript创建对象之寄生构造函数模式(六)
这种模式的基本思想是创建一个函数,该函数的作用仅仅是封装创建对象的代码,然后再返回新创建的对象; 但是从表面上看,这个函数有很像典型的构造函数. function createHuman(name,s ...
- face,Pool
.a 在使用Python进行系统管理时,特别是同时操作多个文件目录或者远程控制多台主机,并行操作可以节约大量的时间.如果操作的对象数目不大时,还可以直接使用Process类动态的生成多个进程 ,十几个 ...
- rsyslog编译依赖问题解决
bit-32-centos6.4测试loganalyzer+mysql+rsyslog web界面中央日志分析系统.1,报json-c错误wget http://cloud.github.com/ ...
- OpenCL + OpenCV 图像旋转
▶ 使用 OpenCV 从文件读取彩色的 png 图像,旋转一定角度以后写回文件 ● 代码,核函数 // rotate.cl //__constant sampler_t sampler = CLK_ ...
- PHP 使用协同程序实现合作多任务
多任务协作 如果阅读了上面的logger()例子,那么你认为“为了双向通信我为什么要使用协程呢? 为什么我不能只用常见的类呢?”,你这么问完全正确.上面的例子演示了基本用法,然而上下文中没有真正的展示 ...
- MySQL优化十大技巧
转自:https://m.2cto.com/database/201701/557910.html MYSQL优化主要分为以下四大方面: 设计:存储引擎,字段类型,范式与逆范式 功能:索引,缓存,分区 ...