python基础08--迭代器,生成器
1.1 迭代器
1、可迭代对象:str,list,tuple,set,dict,
迭代器:f(文件),range()
可迭代对象和迭代器都可以for循环
可迭代对象不会计数,
迭代器会计数,上面操作到第3个,则下面的程序继续使用第4个
以上数据类型中都有一个函数__iter__()
所有包含了函数__iter__()的数据类型都是可迭代对象 Iterable
2、 获取迭代器 .__iter__
迭代器往外拿元素 .__next__
lis = [1,2,3,4]
it = lis.__iter__() #it是迭代器
print(it.__next__()) #打印第一个元素
print(it.__next__()) #打印第二个元素
3、Iterable:可迭代对象 内部包含__iter__()
Iterator:迭代器 内部包含__iter__() 和 __next__
from collections import Iterable #可迭代的
from collections import Iterator #迭代器
lis = [1,2,3,4]
isinstence(对象,类型) #判断对象是否是这个类型
isinstence(lis,Iterable) #判断是否是可迭代对象
isinstence(lis,Iterator) #判读是否是迭代器
4、迭代器的特点:
a 节省内存 迭代器是在循环的过程中,每次生成一个
b 惰性机制 迭代器拿值,一定要next
c 只能往前拿,不能往回走
5、模拟for循环
lis = [1,2,3,4]
it = lis.__iter__()
while True:
try:
print(it.__next__())
except StopIteration:
berak
1.2 生成器
1、生成器函数: 只要含有yield关键字的函数都是生成器函数
生成器表达式:(i for i in lis if )
2、生成器特点
生成器中的数据只能取一次,取完就没有了
惰性运算,不找他取值,他就不工作中
for 循环 套生成器表达式,拆开算
3、生成器函数 yield不能和return共用且需要写在函数中
生成器函数,执行后会得到一个生成器作为返回值
def generator():
print(1)
yield ‘a’
print(2)
yield ‘b’
ret = generator() #ret既是一个迭代器__iter__(),__next__()
print(ret)
print(ret.__next__()) #第一个yield之前的操作
print(ret.__next__()) #第二个yield之前的操作
可以直接用for循环,读取生成器
for i in ret():
print(i)
4、生成器函数 应用,实时读取文件
def tail(filename):
f = open(filename,encoding="utf-8")
while True:
line = f.readline()
if line.strip():
yield line.strip() #生成器
g = tail("file")
for i in g:
print(i)
5、生成器函数的方法
send 获取到下一个值的效果基本和next一样
只是在获取下一个值的时候,给上一个值的位置传递一个数据
注意事项:第一次使用生成器的时候,必须使用next获取
最后一个yield不能接受外部的值
def generator():
print(1)
co = yield #第一次迭代的时候执行到yield,
print(co) #第二次send迭代到第二个yield,且接受了传过来的参数
print(2)
yield
g = generator()
g.__next__()
g.send("women")
6、生成器表达式
g = (i for i in range(10)) #g 就是生成器
(元素相关的操作或者某个操作 for 元素 in 可迭代类型)
lis =[1,2,3,5]
s = [print("women") for i in lis]
7、推导式:遍历操作,筛选操作
列表推导式
g = [i for i in range(10)] #返回的是一个列表
[满足条件的元素相关操作 for 元素 in 可迭代类型 if 元素相关操作]
ret = [i for i in range(30) if i %3 == 0]
print(ret)
字典推导式
例子字典中值和key互换
dic={1:”women”,2:”nen”}
dic_new = {mcase[k]:k for k in dic}
print(dic_new)
集合推导式 去重
python基础08--迭代器,生成器的更多相关文章
- python基础6 迭代器 生成器
可迭代的:内部含有__iter__方法的数据类型叫可迭代的,也叫迭代对象实现了迭代协议的对象 运用dir()方法来测试一个数据类型是不是可迭代的的. 迭代器协议是指:对象需要提供next方法,它要么返 ...
- python基础(9)-迭代器&生成器函数&生成器进阶&推导式
迭代器 可迭代协议和迭代器协议 可迭代协议 只要含有__iter__方法的对象都是可迭代的 迭代器协议 内部含有__next__和__iter__方法的就是迭代器 关系 1.可以被for循环的都是可迭 ...
- (转)python基础之迭代器协议和生成器(一)
一 递归和迭代 二 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...
- Python基础(冒泡、生成器、迭代器、列表与字典解析)
一.冒泡算法 冒泡算法,给定一组数据,从大到小排序或者从小到大排序,就像气泡一样 原理: 相邻的两个对象相比,大的放到后面,交换位置 交换位置通过a,b=b,a来实现 1.我们可以通过for循环来根 ...
- Python基础之迭代器和生成器
阅读目录 楔子 python中的for循环 可迭代协议 迭代器协议 为什么要有for循环 初识生成器 生成器函数 列表推导式和生成器表达式 本章小结 生成器相关的面试题 返回顶部 楔子 假如我现在有一 ...
- python基础之 迭代器回顾,生成器,推导式
1.迭代器回顾 可迭代对象:Iterable 可以直接作用于for循环的对象统称为可迭代对象:Iterable.因为可迭代对象里面存在可迭代协议,所以才会被迭代 可迭代对象包括: 列表(list) 元 ...
- 7th,Python基础4——迭代器、生成器、装饰器、Json&pickle数据序列化、软件目录结构规范
1.列表生成式,迭代器&生成器 要求把列表[0,1,2,3,4,5,6,7,8,9]里面的每个值都加1,如何实现? 匿名函数实现: a = map(lambda x:x+1, a) for i ...
- python基础之迭代器协议和生成器
迭代器和生成器补充:http://www.cnblogs.com/luchuangao/p/6847081.html 一 递归和迭代 略 二 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个ne ...
- python基础8 -----迭代器和生成器
迭代器和生成器 一.迭代器 1.迭代器协议指的是对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2. ...
- Python基础4 迭代器,生成器,装饰器,Json和pickle 数据序列化
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...
随机推荐
- 微信2.1 for Windows发布 微信群可多人语音或视频通话
5月31日,windows电脑版微信发布更新,微信2.1 for Windows带来最主要的功能是微信群可以多人语音或视频通话了,建个家庭群组,常年在外工作的家人也可以每天见面了,多亲切! 除了可以建 ...
- jQuery对象和DOM对象转换,解决jQuery对象不能使用js方法的问题
有时候想要jQuery对象使用js方法,但是jQuery对象是什么js方法都不能用,怎么办呢?方法其实很简单,只要转换jQuery和DOM对象就可以了. 方法一: var $cr = $(" ...
- 小学四则运算口算练习app
目标: 第一次尝试做APP,这次做的东西不是很麻烦,做出一个口算练习的加减乘除的页面,使用者做题,设有答案页,进行核对! 核心部分是出题页面的程序,还有答案页的程序.不设置登录注册页面.冲刺时间:一周 ...
- 第03组 Beta冲刺(4/4)
队名:不等式方程组 组长博客 作业博客 团队项目进度 组员一:张逸杰(组长) 过去两天完成的任务: 文字/口头描述: 制定了初步的项目计划,并开始学习一些推荐.搜索类算法 GitHub签入纪录: 暂无 ...
- WGS 全基因组测序数据分析
1. DNA测序技术 https://www.jianshu.com/p/6122cecec54a 2.FASTA和FASTQ文件格式 https://www.jianshu.com/p/50ff30 ...
- Apollo配置中心--安装使用-docker
官网:https://github.com/ctripcorp/apollo Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推 ...
- Gamma阶段第七次scrum meeting
每日任务内容 队员 昨日完成任务 明日要完成的任务 张圆宁 #91 用户体验与优化https://github.com/rRetr0Git/rateMyCourse/issues/91(持续完成) # ...
- 【医学】三分钟看懂乳腺BI-RADS分级
“BI-RADS”是指美国放射学会的乳腺影像报告和数据系统(Breast Imaging Reporting and Data System)的缩写.BI-RADS分级法将乳腺病变分为0-6级,用来评 ...
- 【IntelliJ IDEA学习之六】IntelliJ IDEA 调试
版本:IntelliJIDEA2018.1.4 一.设置热部署1.自动编译 2.配置hotswap 3.开启compiler.automake.allow.when.app.running CTRL ...
- python的值传递与引用传递
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...