迭代器&生成器&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 ...
随机推荐
- windows 网管常用命令
Windows网络命令行程序 这部分包括: 使用 ipconfig /all 查看配置 使用 ipconfig /renew 刷新配置 使用 ipconfig 管理 DNS 和 DHCP 类别 ID ...
- Linux操作系统,服务器端的主流
1.无意之间,一直使用的Windows,其实也是在Unix的基础之上开发的,什么xp,win7等都是,就是Unix的一些堆砌,其实这样说也不对.但是windows的复杂程度比Linux要复杂,因为Wi ...
- 洛谷:P1087 FBI树 P1030 求先序排列 P1305 新二叉树
至于为啥把这三个题放到一起,大概是因为洛谷的试炼场吧,三道树的水题,首先要理解 先序中序后序遍历方法. fbi树由于数量小,在递归每个区间时,暴力跑一遍区间里的数,看看是否有0和1.至于递归的方法,二 ...
- [Flutter] 一些面试可能会问基础知识
1. Flutter 是什么? Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter正在被 ...
- Gson进行json字符串和对象之间的转化
Gson可以实现对象与json字符串之间的转化,以下是在Android中的示例代码. Gson主页:https://code.google.com/p/google-gson/ public clas ...
- Oracle JOB简例
JOB declare jobno number; begin dbms_job.submit( jobno, 'insert into tmptable1 values(1,1);', to_dat ...
- java 项目中类找不到异常解决办法
最后点击Apply and Close就可以了
- head 标签
1.<meta - > <meta charset="UTF-8"> #utf-8字符编码 <meta http-equiv="Refres ...
- Simple2D-14(音乐播放器)简介
接下来文章中,会介绍一个简单的程序——音乐播放器.通过编写一个音乐播放器在 Simple2D 中加入两个库:音频库 bass 和界面库 ImGui. 下面是音乐播放器的预览图: 播放器的功能比较简单, ...
- UI5-文档-4.35-Responsiveness
在这一步中,我们将改进应用程序的响应能力.SAPUI5应用程序可以在手机.平板电脑和桌面设备上运行,我们可以对应用程序进行配置,以便为每个场景充分利用屏幕空间.幸运的是,SAPUI5控件类似于sap. ...