迭代器&生成器&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 ...
随机推荐
- Leetcode 之Simplify Path @ python
Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", ...
- 搭建GlusterFS文件系统
(1)环境准备 创建两个虚拟机配置如下 把仅主机第二张网卡配置如下: GlusterFS1 GlusterFS2 上传文件到opt目录下 文件内容如下 (2)GlusterFS安装配置 1.安装Glu ...
- java如何写自己的native方法实现调用本地的c++库?
等待编辑 1:首先可以找一本jni java native interface相关的书籍来看.
- Android:手把手教你打造可缩放移动的ImageView(下)
在上一篇Android:手把手教你打造可缩放移动的ImageView最后提出了一个注意点:当自定义的MatrixImageView如ViewPager.ListView等带有滑动效果的ViewGrou ...
- ECCV 2018 | Bi-Real net:超XNOR-net 10%的ImageNet分类精度
这项工作由香港科技大学,腾讯 AI lab,以及华中科技大学合作完成,目的是提升二值化卷积神经网络(1-bit CNN)的精度.虽然 1-bit CNN 压缩程度高,但是其当前在大数据集上的分类精度与 ...
- 外观设计模式 (Facade)
目的:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使 外观设计模式使用场合: 1. 在设计初期阶段,应该有意识的将不同的两个分层.层与层之间建立外观 ...
- Python Twisted系列教程1:Twisted理论基础
作者:dave@http://krondo.com/in-which-we-begin-at-the-beginning/ 译者:杨晓伟(采用意译) 前言: 最近有人在Twisted邮件列表中提出诸 ...
- cplex-Java-样例代码解析
import ilog.cplex.IloCplex; import ilog.concert.*; /** * * * * 最大化 x1 + 2x2 + 3x3</br> * 约束 &l ...
- 《汇编语言 基于x86处理器》前五章的小程序
▶ 书中前五章的几个小程序,基本的运算操作,使用了作者的库 Irvine32 和 Irvine64(一开始以为作者网站过期了,各网站上找到的文件大小都不一样,最后发现是要搭梯子 Orz,顺利下载).注 ...
- sftp(paramiko)
SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的.但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用S ...