1 迭代器的定义

凡是能被next()函数调用并不断返回一个值的对象均称之为迭代器(Iterator)

2 迭代器的说明

Python中的Iterator对象表示的是一个数据流,被函数next()函数调用后不断返回下一个数据,直到没有数据时抛出StopIteration错误;在存储空间中,迭代器并非全部数据,而是通过next()函数不断按需计算下一个数据,可以把Iterator看成序列,但是这个序列长度却是“未知的”,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

3 迭代对象

凡是可作用于for循环的对象都是Iterable类型

4 迭代器与迭代对象的差别

4.1 迭代对象的长度是可知的,迭代器的长度是“未知的”

>>> a = [1,2,3,4,5]
>>> a
[1, 2, 3, 4, 5]
>>> b = iter(a)
>>> b
<list_iterator object at 0x7f27f6b02710>
>>> len(a)
5
>>> len(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'list_iterator' has no len()

4.2 迭代对象Iterable和迭代器Iterator可以相互转化

集合数据类型list、tuple、dict、set、str均是迭代对象Iterable,但不是迭代器Iterator;

但是可以通过iter()函数将上述的迭代对象转变成Iterator。

另外迭代器只能向前取值,不能后退,迭代对象则可任意取值

>>> a = [1,2,3,4]
>>> b = iter(a)
>>> next(b)
1
>>> c = list(b)
>>> c
[2, 3, 4]
>>> next(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>> d = b
>>> d
<list_iterator object at 0x7fc895d4c668>
>>> next(d)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

注意:生成器均是Iterator对象

4.3 均可用isinstance()判断对象

可以使用isinstance()来判断一个对象是否是Iterable()Iterator()对象。

迭代对象

>>> isinstance([],Iterable)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'Iterable' is not defined

>>> from collections import Iterable

>>> isinstance([],Iterable)
True

>>> isinstance((),Iterable)
True

>>> isinstance((x for x in range(10)),Iterable)
True

>>> isinstance(1,Iterable)
False

迭代器

>>> from collections import Iterator
>>> isinstance([],Iterator)
False
>>> isinstance(iter([]),Iterator)
True

4.4 存储数据形式

Iterator对象可以表示一个无限大的数据流,例如全体自然数,占用较小的存储空间;但是Iterable对象则是直接存储全体自然数,会占用较大的存储空间。


L = [1, 3, 5, 7]
# for 语句实现遍历
for x in L:
    print(x)

# 用while 语句来实现遍历
it = iter(L)
while True:
    try:
        x = next(it)
    except StopIteration:
        break
    print(x)

print("程序结束")

运行

1
3
5
7
1
3
5
7
程序结束

5 迭代器相关函数

iter(Iterable)      从一个对象中返回迭代器(Iterable必须是可迭代对象)

next(Iterator)    从迭代器Iterator中获取下一个记录,如果无法获取,则会触发StopIteration异常

L = [1, 3, 5, 7]
it = iter(L)  # 用 L 来返回一个迭代器
v = next(it)  # 返回1
next(it)  # 返回3
next(it)  # 返回5
next(it)  # 返回7
next(it)  # StopIteration 异常

Python学习笔记014——迭代器 Iterator的更多相关文章

  1. Python学习笔记014——迭代工具函数 内置函数enumerate()

    1 描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. 2 语法 enumerate(sequ ...

  2. python学习笔记之迭代器和函数(第三天)

    一.collection系列: 1.counter计数器 如果counter(dict)是对字典的一个补充,如果counter(list)则是对列表的补充,初步测试对字典的值进行排序. ####### ...

  3. Python学习笔记:迭代器(Iterator)详解

    一.可迭代的对象(Iterable) 1.定义:可以直接用在循环的数据类型,如list,tuple,dict,set,str,还有generator(生成器), 和带yield的函数,这些直接可以用在 ...

  4. python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化

    生成器 在Python中,一边循环一边计算的机制,称为生成器:generator. 如: >>> g = (x * x for xin range(10)) >>> ...

  5. Python学习笔记014——生成器Generator

    1 生成器定义 在Python中,一边循环一边计算的机制,称之为生成器(generator). 生成器是一个迭代器. 含有yield语句的函数是生成器函数,该函数被调用时返回一个生成器对象(yield ...

  6. python学习笔记四 迭代器,生成器,装饰器(基础篇)

    迭代器 __iter__方法返回一个迭代器,它是具有__next__方法的对象.在调用__next__方法时,迭代器会返回它的下一个值,若__next__方法调用迭代器 没有值返回,就会引发一个Sto ...

  7. Python学习笔记010_迭代器_生成器

     迭代器 迭代就类似于循环,每次重复的过程被称为迭代的过程,每次迭代的结果将被用来作为下一次迭代的初始值,提供迭代方法的容器被称为迭代器. 常见的迭代器有 (列表.元祖.字典.字符串.文件 等),通常 ...

  8. Python学习笔记014——迭代工具函数 内置函数zip()

    1 描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操 ...

  9. python学习笔记014——错误和异常

    Python有两种错误很容易辨认:语法错误和异常. 1 什么是语法错误 Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例 if i>4 print("if语句输出 ...

随机推荐

  1. pymysql的使用心得(1)------小细节,注意!

    最近一段时间开始使用MySQL,使用的是pymysql库. 其中遇到过一些小问题,值得记录一下,以便今后使用的时候注意到. 表格的建立,代码如下: cursor.execute("creat ...

  2. Flatten Binary Tree to Linked List leetcode java

    题目: Given a binary tree, flatten it to a linked list in-place. For example, Given 1 / \ 2 5 / \ \ 3 ...

  3. java 切图 判断图片是否是纯色/彩色图片

    首先上切图的代码 /** * 图片剪裁 * @param x 距离左上角的x轴距离 * @param y 距离左上角的y轴距离 * @param width 宽度 * @param height 高度 ...

  4. 如何将数据转换libsvm格式文件

    原文:http://blog.sina.com.cn/s/blog_5c2f929b0100qse8.html 有三种工具可用1.网上有一个xls文FormatDataLibsvm.xls具有宏命令, ...

  5. XGBoost:在Python中使用XGBoost

    原文:http://blog.csdn.net/zc02051126/article/details/46771793 在Python中使用XGBoost 下面将介绍XGBoost的Python模块, ...

  6. [Functional Programming] Fst & Snd, Code interview question

    cons(a, b) constructs a pair, and car(pair) and cdr(pair) returns the first and last element of that ...

  7. IN 查询时出现ORA-01795:列表中的最大表达式数为1000解决方法

    问题描写叙述: SQL进行IN查询时出现:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000 解决的方法: 问题原因是:SQL进行IN查询时.IN中的 ...

  8. OSX:不同OSX版本号的标记可能不兼容-续

    不同OSX版本号的标记可能不兼容-续: 经过測试,10.10DP2的Update.俗称DP3.的版本号也没有纠正这个问题.而造成该问题的是安装过程中一開始就选择中文,假设安装时使用英文.在第一次进入操 ...

  9. jQuery和CSS3超酷表单美化插件

     这是一款效果很精美炫酷的jQuery和CSS3联系方式表单美化插件.大多数站点上都有让用户填写的联系方式表单,一个设计良好的表单可以大大的提升用户的体验度.该表单美化插件在原生HTML表单的基础上进 ...

  10. ArcGIS Pro体验04——菜单栏

    对菜单栏进行熟悉一下: 1.地图菜单 剪切板(Clipboard):剪切(Cut).复制(Copy).粘贴(Paste),这些不用说了,在ArcMap中是放在"编辑"菜单下面的.当 ...