人生苦短之Python迭代器
迭代
在Python中,如果给定一个list或者touple,我们可以通过for循环来遍历,将值依次取出,这种遍历称为迭代。
在Python中是通过for...in..来进行遍历的,在Java中则是通过下标来遍历 for(int i;i<length;i++){},Python作为解释性语言,在语法上是十分简单的,可以遍历数组集合,也可以遍历字典。看下面的例子:
for name in names:
print(name) person = {'name': '张三', 'age': 14, 'sex': '男'} for key in person:
print(key)
for value in person.values():
print(value)
for item in person.items():
print(item) for i, value in enumerate(names):
print(i, value)
遍历一个list或者touple使用for..in..,也可以直接遍历字典的key或者value或者字典里地item,同样地如果我们需要跟其他语言中的那样的下标的话,我们可以使用for i,xx in .. 来获取下标,由此呢,我们也可以进行引用多个变量来进行迭代,例如将key和value值全部分别遍历,可以使用for key, value in dic.item 来进行遍历,使用起来是非常灵活地。
迭代器
list,dict,str等数据类型都可直接使用for循环遍历,这些被称为可迭代对象:Iterable,而生成器不但可以使用for循环遍历,还可以调用next()函数不断的调用返回下一个值,直到最后抛出StopIteration错误无法返回下一个值,这种可以被next()函数不断调用返回下一个值的对象称为迭代器:Iterator。
生成器都是iterator对象,但是list,dict,str等数据类型却不是迭代器,因为迭代器都是可以被next()函数调用不断地返回下一个值,它的大小是未知的,它需要生成了下一个值才会计算。我们可以使用iter()函数将这些可迭代对象变成迭代器。
上面提到了生成器,生成器是什么呢?
我们先来看下列表生成式。我们生成一个列表,可以这样做:
生成一个1-9的平方值的列表
L=[]
for x in range(1,10):
L.append(x*x)
如果用列表生成式可以是这样:L=[x*x for x in range(1,10)],同时我们还可以加一些判断,比如我只想要偶数的平方值,可以在后面加个if判断。了解了列表生成式,我们在看下生成器。
最简单地创建生成器的方式,L=(x*x for x in range(1,10)),将[]换成(),那么完成后的区别在哪里呢?
如果是列表生成式,我执行了一个列表生成式,它会根据生成式的条件立即生成一个列表,然后我可以对这个列表进行遍历(迭代),这也就是上面说的list是可迭代对象;
如果它是个生成器,我运行了后它不会立即生成一个我想要的列表,它比较懒,它会在我需要的时候跟我生成一个我想要的值,什么时候是我需要的呢,就是调用next()函数的时候,通过next()函数获得生成器的下一个返回值,直到最后一个元素,没有值了抛出StopIteration错误。它里面保存的不是计算好的值,而是计算的算法,每次需要的时候给计算出来。
可以作用于for循环遍历的对象都是可迭代对象
可以作用于next()函数的对象都是迭代器对象
我也学的有点蒙圈,暂时先这样理解,在今后用的地方多了加深对这方面的理解。
人生苦短之Python迭代器的更多相关文章
- Python迭代器,可迭代对象,生成器
迭代器 迭代器(iterator)有时又称游标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍访的界面,设计人员无需关心容器物件的内存分配的实现细节. ...
- python迭代器与iter()函数实例教程
python迭代器与iter()函数实例教程 发布时间:2014-07-16编辑:脚本学堂 本文介绍了python迭代器与iter()函数的用法,Python 的迭代无缝地支持序列对象,而且它还允许程 ...
- Python 迭代器和列表解析
Python 迭代器和列表解析 1)迭代器 一种特殊的数据结构,以对象形式存在 >>> i1 = l1.__iter__() >>> i1 = iter(l1) 可 ...
- Python迭代器,生成器--精华中的精华
1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大 ...
- Python 迭代器和生成器(转)
Python 迭代器和生成器 在Python中,很多对象都是可以通过for语句来直接遍历的,例如list.string.dict等等,这些对象都可以被称为可迭代对象.至于说哪些对象是可以被迭代访问的, ...
- 一文搞懂Python迭代器和生成器
很多童鞋搞不懂python迭代器和生成器到底是什么?它们之间又有什么样的关系? 这篇文章就是要用最简单的方式让你理解Python迭代器和生成器! 1.迭代器和迭代过程 维基百科解释道: 在Python ...
- Python - 迭代器与生成器 - 第十三天
Python 迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问 ...
- python迭代器,生成器
1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大 ...
- 怎么理解Python迭代器与生成器?
怎么理解Python迭代器与生成器?在Python中,使用for ... in ... 可以对list.tuple.set和dict数据类型进行迭代,可以把所有数据都过滤出来.如下: ...
随机推荐
- 浅析PropertySource 基本使用
目录 一.PropertySource 简介 二.@PropertySource与Environment读取配置文件 三.@PropertySource与@Value读取配置文件 四.@Propert ...
- javascript 函数初探 (六)--- 闭包初探#3
相关定义与闭包: 实际上,每个函数都可以被认为是一个闭包.因为每个函数都在其所在域(即该函数的作用域)中维护了某种联系. 但在大多数的时候,该作用于在函数体内被执行完之后就被自行销毁了.---除非发生 ...
- GridControl 校验输入单元格格式 z
// 对应的校验行事件,ValidateRow private void gv_FeeItem_ValidateRow(object sender, DevExpress.XtraGrid.Views ...
- Spring 与 MyBatis 整合
一.实验介绍 1.1 实验内容 本节课程将整合 Spring 和 MyBatis,并采用 Junit 进行单元测试. 1.2 实验知识点 Spring - MyBatis 整合 Junit 单元测试 ...
- Pearson product-moment correlation coefficient in java(java的简单相关系数算法)
一.什么是Pearson product-moment correlation coefficient(简单相关系数)? 相关表和相关图可反映两个变量之间的相互关系及其相关方向,但无法确切地表明两个变 ...
- mysql delete auto_increment列时的注意问题
1. 说明 在对带有AUTO_INCREMENT列的表delete掉所有数据时: (1)对于MyISAM表,在delete表中所有数据时没有任何风险,随意折腾: (2)对于InnoDB表,在delet ...
- C 标准库 - <setjmp.h>
C 标准库 - <setjmp.h> 简介 setjmp.h 头文件定义了宏 setjmp().函数 longjmp() 和变量类型 jmp_buf,该变量类型会绕过正常的函数调用和返回规 ...
- 每天进步一点点——Linux中的线程局部存储(二)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/26876231 在Linux中另一种更为高效的线程局部存储方法,就是使用keyword ...
- opencv yuv420与Mat互转
项目用到opencv 融合图片的功能,经过一天的调试,达到预期目标,先将如何调用opencv库实现YUV42与Mat互转记录下来. 一.下载opencv编译的库下载地址是:http://opencv. ...
- linux 下weblogic启动和停止
启动weblogic 本例中weblogic 安装路径为:/data/weblogic/wls/wlserver_10.3/ 1. 启动nodeManager cd /data/weblogic/wl ...