函数 (四) 迭代器和生成器
一 迭代器
一 迭代的概念
#迭代器即迭代的工具,那什么是迭代呢?#迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不是迭代print('===>') l=[1,2,3] count=0 while count < len(l): #迭代print(l[count])count+=1
二 为何要有迭代器?什么是可迭代对象?什么是迭代器对象?
1 #1、为何要有迭代器? 2 对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引的迭代方式,这就是迭代器 3 4 #2、什么是可迭代对象? 5 可迭代对象指的是内置有__iter__方法的对象,即obj.__iter__,如下 6 'hello'.__iter__ 7 (1,2,3).__iter__ 8 [1,2,3].__iter__ 9 {'a':1}.__iter__ 10 {'a','b'}.__iter__ 11 open('a.txt').__iter__ 12 13 #3、什么是迭代器对象? 14 可迭代对象执行obj.__iter__()得到的结果就是迭代器对象 15 而迭代器对象指的是即内置有__iter__又内置有__next__方法的对象 16 17 文件类型是迭代器对象 18 open('a.txt').__iter__() 19 open('a.txt').__next__() 20 21 22 #4、注意: 23 迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象
三 迭代器对象的使用
1 dic={'a':1,'b':2,'c':3} 2 iter_dic=dic.__iter__() #得到迭代器对象,迭代器对象即有__iter__又有__next__,但是:迭代器.__iter__()得到的仍然是迭代器本身 3 iter_dic.__iter__() is iter_dic #True 4 5 print(iter_dic.__next__()) #等同于next(iter_dic) 6 print(iter_dic.__next__()) #等同于next(iter_dic) 7 print(iter_dic.__next__()) #等同于next(iter_dic) 8 # print(iter_dic.__next__()) #抛出异常StopIteration,或者说结束标志 9 10 #有了迭代器,我们就可以不依赖索引迭代取值了 11 iter_dic=dic.__iter__() 12 while 1: 13 try: 14 k=next(iter_dic) 15 print(dic[k]) 16 except StopIteration: 17 break 18 19 #这么写太丑陋了,需要我们自己捕捉异常,控制next,python这么牛逼,能不能帮我解决呢?能,请看for循环
四 for循环
#基于for循环,我们可以完全不再依赖索引去取值了 dic={'a':1,'b':2,'c':3} for k in dic:print(dic[k])#for循环的工作原理 #1:执行in后对象的dic.__iter__()方法,得到一个迭代器对象iter_dic #2: 执行next(iter_dic),将得到的值赋值给k,然后执行循环体代码 #3: 重复过程2,直到捕捉到异常StopIteration,结束循环
五 迭代器的优缺点
#优点:- 提供一种统一的、不依赖于索引的迭代方式- 惰性计算,节省内存 #缺点:- 无法获取长度(只有在next完毕才知道到底有几个值)- 一次性的,只能往后走,不能往前退
二 生成器
一 什么是生成器
#只要函数内部包含有yield关键字,那么函数名()的到的结果就是生成器,并且不会执行函数内部代码def func():print('====>first')yield 1print('====>second')yield 2print('====>third')yield 3print('====>end')g=func() print(g) #<generator object func at 0x0000000002184360>
二 生成器就是迭代器
g.__iter__ g.__next__ #2、所以生成器就是迭代器,因此可以这么取值 res=next(g) print(res)
转载于:https://www.cnblogs.com/fu-yong/p/8178532.html
函数 (四) 迭代器和生成器相关推荐
- python函数知识四 迭代器、生成器
15.迭代器:工具 1.可迭代对象: 官方声明,只要具有__iter__方法的就是可迭代对象 list,dict,str,set,tuple -- 可迭代对象,使用灵活 #方法一: list.__ ...
- 函数、迭代器、生成器、装饰器
函数 函数基础 一.为什么要使用函数 把重复的代码提取出来,节省代码量 二.函数分类 内置函数,如len(),sun() 自定义函数 三.如何定义函数 def 函数名(参数1,参数2,参数3,...) ...
- Python开发——函数【迭代器、生成器、三元表达式、列表解析】
递归和迭代 小明问路篇解释说明 递归:小明-->小红-->小于-->小东:小东-->小于-->小红-->小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不 ...
- python魔法函数和装饰器_python魔法方法、构造函数、序列与映射、迭代器、生成器...
在Python中,所有以__双下划线包起来的方法,都统称为"魔术方法".比如我们接触最多的__init__,魔法方法也就是具有特殊功能的方法. 构造函数 构造函数不同于普通方法,将 ...
- python 可迭代对象_Python3学习笔记(十四):可迭代对象、迭代器和生成器
记得在刚开始学Python的时候,看到可迭代对象(iterable).迭代器(iterator)和生成器(generator)这三个名词时,完全懵逼了,根本就不知道是啥意识.现在以自己的理解来详解下这 ...
- 五分钟学会python函数_五分钟带你搞懂python 迭代器与生成器
前言 大家周末好,今天给大家带来的是Python当中生成器和迭代器的使用. 我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉得这是一种新的获取数据的方法.对于获取数据的方法而言,我们会一种就 ...
- python学习笔记分享(二十四)python学习笔记分期补充(二)复数,randint与sample,进制转换表,转义字符,二维数组,键,end,pass,迭代器和生成器
一:复数 Python支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型. complex(x) 将x转换到一个复数,实数部 ...
- python 如何判断一个函数执行完成_Python核心编程的四大神兽迭代器、生成器 、闭包以及装饰器...
本文将主要分为4大部分,分别介绍Python核心编程中的迭代器.生成器 .闭包以及装饰器. 生成器 生成器是生成一个值的特殊函数,它具有这样的特点:第一次执行该函数时,先从头按顺序执行,在碰到yiel ...
- python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...
- python四大器_Python编程四大神兽:迭代器、生成器、闭包和装饰器
生成器 生成器是生成一个值的特殊函数,它具有这样一个特点:第一次执行该函数时,先从头按顺序执行,在碰到yield关键字时该函数会暂停执行该函数后续的代码,并且返回一个值:在下一次调用该函数执行时,程序 ...
最新文章
- javascript:document的属性和方法,title,innerHTML,
- 刷新存储器的容量单位是什么_存储系统 半导体存储器
- Linux内核调试技术——kprobe使用与实现
- linux命令(常用)
- Debug a Server–Side Rendered SAP Spartacus Storefront Using Chrome Dev Tools
- bat 调用class文件_【Java视频教程】day42-??什么是Class???
- docker--删除container和image
- Java 中 final 内存语义
- ST7200.11固件门DIY全程记录[2009-05-03修复成功!]
- python说句心里话a_python第一周作业
- 修改HOST文件屏蔽网站
- 冉宝的每日一题-8月16日回溯法+ 动态规划压缩
- Linux 文件后面带星号
- CTE递归 MAXRECURSION 遇到的问题
- Linux监控平台介绍
- 原本 1.3绿色版-扫描仪/相机/手机拍摄照片变清晰软件
- kindle paperwhite 使用体验
- NEW RDSP MODE I
- 方块填数 “数独”是当下炙手可热的智力游戏。一般认为它的起源是“拉丁方块”,是大数学家欧拉于1783年发明的。 如图[1.jpg]所示:6x6的小格被分为6个部分(图中用不同的颜色区分),每个部
- Android PackageManagerService分析一:PMS的启动
热门文章
- 自定义实现moveable button
- MSN和QQ文件传输速度解析
- dvd管理器java,简单DVD管理-java练习题
- python把英语句子成分字母_句子成分的表达字母
- matlab求最短路径代码_【高等数学】复数,通往真理的最短路径
- 球球大作战测试服android版,球球大作战10.0体验服
- php 输出读取结果集,php获取数据库结果集实例详解
- mysql 表单属性_php表单常用属性有什么?
- 思考产品架构的4个视角:业务、场景、数据/功能、实现
- linux日志自动按天保存,linux实现按天生成日志文件并自动清理