python学习之迭代器与生成器
1、迭代器省内存
迭代器只允许往后读数据,不允许回读数据
迭代器不能跳着读文件,因为他是一点一点加载文件内容到内存的,读完了可以销毁或丢掉
2、生成一个迭代器
a = iter(["fd", "ss", "dd", "ff"])
3、迭代器方法:
python3.0以上:__next__(); python2.7:next()
a.__next__() 读取的是fd
a.__next__() 读取的是ss
a.__next__() 读取的是dd
a.__next__() 读取的是ff
a.__next__() 会提示错误,停止迭代
4、linux中的cat、more、less等方法都类似迭代器效果
5、迭代器的用途:
f = open(*****)
for line in f: //类似于2.7里面的xreadlines()
print(line)
//这种读的方式就是迭代的读取方式,所以这么读比较快速。
//比f.read() 和 f.readlines()效率高很多
6、生成器 generator
一个函数调用时返回一个迭代器,那这个函数就叫生成器,如果函数中包含yield语法,那这个函数就会变成生成器
6.1
def cash(amount):
while amount > 0:
amount -= 100
yield 100 //这个关键字此时在这里做了一个返回操作
print("我是一个生成器")
atm = cash(500)
print(atm.__next__())
print(atm.__next__())
print("随时跳出函数与循环") //就相当于异步操作
print(atm.__next__())
print(atm.__next__())
print(atm.__next__())
6.2
import time
def consumer(name):
print("%s 准备吃包子啦" % name)
while True:
baozi = yield //此时yield做为一个接收值的容器
print("包子[%s]来了,被[%s]吃了")
def producer(name):
c1 = consumer('A')
c2 = consumer('B')
c1.__next__() //为了打印第一句话“准备吃包子啦”
c2.__next__() //为了打印第一句话“准备吃包子啦”
print("老子开始做包子啦")
for i in range(10):
time.sleep(1)
print("做了2个包子")
c1.send(i)
c2.send(i)
producer("hehe")
python学习之迭代器与生成器的更多相关文章
- Python学习之迭代器和生成器
那么首先什么是迭代器和生成器呢? 迭代器即迭代的工具,那么什么又是迭代呢?所谓迭代:迭代是一个重复的过程,每次重读即一次迭代,并且每次迭代的结果都是下一次迭代的初始值.例: l=[1,2,3] cou ...
- python学习-38迭代器和生成器
迭代器和生成器 ---- 迭代器协议和for循环工作机制 1.迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个Stoplteration异常,以终止迭代(只能往 ...
- Python学习--07迭代器、生成器
迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). Python里使用for...in来迭代. 常用可迭代对象有 ...
- python学习日记(迭代器、生成器)-乱七八糟
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...
- python学习 day13 迭代器,生成器,枚举对象
一.复习 1.闭包:定义在函数内部的函数(被函数嵌套的函数) 2.装饰器:闭包的一个应用场景 -- 为一个函数添加新功能的工具 3.开放封闭原则:不能修改源代码,不能修改调用方式,但可以对外提供增加新 ...
- python 学习分享-迭代器与生成器篇
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式.. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后 ...
- Python学习之--迭代器、生成器
迭代器 迭代器是访问集合元素的一种方式.从对象第一个元素开始访问,直到所有的元素被访问结束.迭代器只能往前,不能往后退.迭代器与普通Python对象的区别是迭代器有一个__next__()方法,每次调 ...
- Python学习笔记——迭代器和生成器
1.手动遍历迭代器 使用next函数,并捕获StopIteration异常. def manual_iter(): with open('./test.py') as f: try: while Tr ...
- python学习10—迭代器、三元表达式与生成器
python学习10—迭代器.三元表达式与生成器 1. 迭代器协议 定义:对象必须提供一个next方法,执行该方法或者返回迭代中的下一项,或者返回一个StopIteration异常,以终止迭代(只能往 ...
随机推荐
- SQL update join on 连接更新
http:/how-can-i-do-an-update-statement-with-join-in-sql create table sale ( id int, udid int, assid ...
- Scipy - Python library - Math tool - Begin
Introduction Scientific Computing Tools for Python. Seen in Scipy.org. Environment Linux, CentOS 7 w ...
- sql server 删除表及表的相关视图、存储过程、方法
注意:进行此操作前需先备份数据库,免得删错无法恢复 1.查询 SELECT Name ,type FROM SysObjects WHERE name LIKE '%cases%' 2.拼接语句 SE ...
- CentOS下使用Postfix + Dovecot + Dnsmasq搭建极简局域网邮件系统
背景 开发环境为局域网,工作内容需要经常查看邮件文件(*.eml),可恶的Foxmail必须验证账户才能进入主界面,才能打开eml文件查看. 无奈搭一个局域网内的邮件系统吧.极简搭建,仅用于通过Fox ...
- win7下开启telnet命令
win7下开启telnet命令 win7上telnet这条命令默认被关闭了. 开启telnet方法如下: 一,打开控制面版 二,选择程序 三,选择打开或关闭windows功能 在弹出窗口中把 Teln ...
- shell中{}的妙用
shell中${}的妙用 1. 截断功能 ${file#*/}: 拿掉第一条/及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}: 拿 ...
- 实现一个小目标,动动小指,分享可得iphone7/ipad/U盘|奥威软件
为什么很多人喜欢冬天呢?是因为冬天有着“床边挂起长长棉袜,而你做着甜甜美梦”的平安夜?还是因为冬天有着“具有无法言述的浪漫情怀”的圣诞节? 是不是还沉浸在平安夜,圣诞节的双节狂欢中, 好像不管长到多大 ...
- Portal 设置
nodatas 设置agent 状态,其采集指标 agent.alive 上报中断时,通知用户. hostgroups设置 模版设置
- 通过Maven将Web程序部署到远程Tomcat8服务器的一些注意事项
1.环境变量检查(注意一定要做,否则会出现莫名其妙的错误):JAVA_HOMEM2_HOMECATALINA_HOME 2.开发环境检查,在Eclipse开发环境中最好做以下两方面的检查 2.1)Ma ...
- RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系列目录
RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系列目录 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架 ...