python学习-38迭代器和生成器
迭代器和生成器 ---- 迭代器协议和for循环工作机制 1.迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个Stoplteration异常,以终止迭代(只能往后走,不能往前走)
2.可迭代对象:实现了迭代器的对象(如何实现:对象内部定义一个_iter_()方法)
3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如:for循环,sum,min,max函数等)使用迭代器协议访问对象。
dic ={'a':1,'b':2}
iter_d=dic.__iter__() # 相当于for循环的迭代。 列表,字典,文件等有_iter_()方法的都可以
print(iter_d.__next__())
for循环的本质:循环所有对象,全部都是使用的迭代协议
-for循环机制也可以用while表示
a=[1,2,3,4,5]
iter_a=a.__iter__()
while True:
try:
print(iter_a.__next__())
except StopAsyncIteration:
print('迭代完毕,循环终止')
break
-迭代器原理
1.
a = [1,2,3,4,5]
iter_a=a.__iter__() # 切换为迭代器形式 print(iter_a.__next__())
print(iter_a.__next__())
print(iter_a.__next__())
print(iter_a.__next__())
print(iter_a.__next__())
运行结果:
1
2
3
4
5 Process finished with exit code 0
2.用next方法
a = [1,2,3,4,5]
iter_a=a.__iter__() # 切换为迭代器形式 print(next(iter_a))
print(next(iter_a))
print(next(iter_a))
print(next(iter_a))
print(next(iter_a))
运行结果是一样的
只要遵循迭代器协议,那就是可迭代对象。
------ 初识生成器
可以理解为一种数据类型。这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的_iter_方法),所以生成器就是可迭代对象。
--生成器表现形式:
1.生成器函数
def test():
yield 1
g=test()
print(g) # 生成器内存地址
print(g.__next__())
运行结果:
<generator object test at 0x0000023EBB890B10>1 Process finished with exit code 0
2.生成器表达式
res=(i for i in range(11))
print(res.__next__())
print(res.__next__())
运行结果:
0
1 Process finished with exit code 0
ps:
三元表达式
name='john'
res='' if name == 'john' else'' #如果name='john',返回1,不是则返回2
print(res)
运行结果:
1 Process finished with exit code 0
python学习-38迭代器和生成器的更多相关文章
- Python学习之迭代器和生成器
那么首先什么是迭代器和生成器呢? 迭代器即迭代的工具,那么什么又是迭代呢?所谓迭代:迭代是一个重复的过程,每次重读即一次迭代,并且每次迭代的结果都是下一次迭代的初始值.例: l=[1,2,3] cou ...
- 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.迭代器省内存 迭代器只允许往后读数据,不允许回读数据 迭代器不能跳着读文件,因为他是一点一点加载文件内容到内存的,读完了可以销毁或丢掉 2.生成一个迭代器 a = iter(["fd&q ...
- Python学习笔记——迭代器和生成器
1.手动遍历迭代器 使用next函数,并捕获StopIteration异常. def manual_iter(): with open('./test.py') as f: try: while Tr ...
- python学习10—迭代器、三元表达式与生成器
python学习10—迭代器.三元表达式与生成器 1. 迭代器协议 定义:对象必须提供一个next方法,执行该方法或者返回迭代中的下一项,或者返回一个StopIteration异常,以终止迭代(只能往 ...
随机推荐
- [转载]XML非法字符的处理
https://blog.csdn.net/qq_36330228/article/details/84779390 static void Main(string[] args) { string ...
- vue之大文件分段上传、断点续传
需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...
- gulp+webpack多页应用开发,webpack仅处理打包js
项目背景:一个综合网站,开发模式为后端嵌套数据,前端开发静态页面和部分组件. 问题:gulp任务处理自动刷新.sass编译等都是极好的.但是对于js的处理并不是很好,尤其是项目需要开发组件时候,如评论 ...
- JAVA中Stringbuffer的append( )方法
Stringbuffer是动态字符串数组,append( )是往动态字符串数组添加,跟“xxxx”+“yyyy”相当‘+’号. 跟String不同的是Stringbuffer是放一起的,String1 ...
- [内网渗透] MSF路由转发/网络代理
这里只做记录,不做详解 0x01 路由转发 已经拿到一台公网服务器: 1.1 方法1 进到meterpreter的会话: route #查看路由信息 background退出当前会话,通过会话2,转发 ...
- 刷题记录:[SUCTF 2019]Pythonginx
目录 刷题记录:[SUCTF 2019]Pythonginx 一.涉及知识点 1. CVE-2019-9636:urlsplit不处理NFKC标准化 2.Nginx重要文件位置 二.解题方法 刷题记录 ...
- DELPHI无类型参数
DELPHI无类型参数 有不少Delphi新手对过程(函数)的无类型参数感到困惑,不知该传递什么类型.其实,Delph中有不少这类无类型参数,如常用的Move过程,只要把它当着一个Byte类型的数组看 ...
- Research Guide for Video Frame Interpolation with Deep Learning
Research Guide for Video Frame Interpolation with Deep Learning This blog is from: https://heartbeat ...
- IntelliJ IDEA Check out from git
点击check out from vesion control 填写git地址,test,clone
- gogs 邀请协作者 500错误
触发原因: 对db文件的user表删了某个用户导致 解决: 注册个新用户,把id改成原来的id(默认都会自增长)