Python基础-迭代器和生成器
2017-09-10 00:00
344 查看
一、可迭代对象
在Python中,我们已经知道,可以直接作用于
一类是集合数据类型,如
一类是
这些可以直接作用于
可以使用
二、迭代器
可以被
Python的
生成器都是
把
三、生成器
在Python中,使用生成器可以很方便的支持迭代器协议。生成器通过生成器函数产生,生成器函数可以通过常规的def语句来定义,但是不用return返回,而是用yield一次返回一个结果,在每个结果之间挂起和继续它们的状态,来自动实现迭代协议。
也就是说,yield是一个语法糖,内部实现支持了迭代器协议,同时yield内部是一个状态机,维护着挂起和继续的状态。
每次调用
小结:
当调用生成器函数的时候,函数只是返回了一个生成器对象,并没有执行。
当next()方法第一次被调用的时候,生成器函数才开始执行,执行到yield语句处停止
next()方法的返回值就是yield语句处的参数(yielded value)
当继续调用next()方法的时候,函数将接着上一次停止的yield语句处继续执行,并到下一个yield处停止;如果后面没有yield就抛出StopIteration异常
参考资料:
1. http://www.cnblogs.com/alex3714/articles/5765046.html
2. http://www.cnblogs.com/wilber2013/p/4652531.html
在Python中,我们已经知道,可以直接作用于
for循环的数据类型有以下几种:
一类是集合数据类型,如
list、
tuple、
dict、
set、
str等;
一类是
generator,包括生成器和带
yield的generator function。
这些可以直接作用于
for循环的对象统称为可迭代对象:
Iterable。
可以使用
isinstance()判断一个对象是否是
Iterable对象:
二、迭代器
可以被
next()函数调用并不断返回下一个值的对象称为迭代器:
Iterator。
Python的
Iterator对象表示的是一个数据流,Iterator对象可以被
next()函数调用并不断返回下一个数据,直到没有数据时抛出
StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过
next()函数实现按需计算下一个数据,所以
Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。
生成器都是
Iterator对象,但
list、
dict、
str虽然是
Iterable,却不是
Iterator。
把
list、
dict、
str等
Iterable变成
Iterator可以使用
iter()函数:
三、生成器
在Python中,使用生成器可以很方便的支持迭代器协议。生成器通过生成器函数产生,生成器函数可以通过常规的def语句来定义,但是不用return返回,而是用yield一次返回一个结果,在每个结果之间挂起和继续它们的状态,来自动实现迭代协议。
也就是说,yield是一个语法糖,内部实现支持了迭代器协议,同时yield内部是一个状态机,维护着挂起和继续的状态。
每次调用
next(zrange),就计算出zrange的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出
StopIteration的错误。
小结:
当调用生成器函数的时候,函数只是返回了一个生成器对象,并没有执行。
当next()方法第一次被调用的时候,生成器函数才开始执行,执行到yield语句处停止
next()方法的返回值就是yield语句处的参数(yielded value)
当继续调用next()方法的时候,函数将接着上一次停止的yield语句处继续执行,并到下一个yield处停止;如果后面没有yield就抛出StopIteration异常
参考资料:
1. http://www.cnblogs.com/alex3714/articles/5765046.html
2. http://www.cnblogs.com/wilber2013/p/4652531.html
相关文章推荐
- Python语言基础学习(数据类型,迭代器及生成器)
- Python高手之路【九】python基础之迭代器与生成器
- Python基础-生成器和迭代器
- Python基础02--迭代器、生成器、列表解析
- Py修行路 python基础 (十一)迭代器 与 生成器
- python基础-迭代器、for底层机制、生成器、list结合yield、__call__、yield函数列表
- python基础-迭代器和生成器
- python基础之迭代器和生成器
- Python基础知识7:生成器和迭代器、递归
- python基础-生成器,迭代器
- 11-Python3从入门到实战—基础之生成器和迭代器
- Python基础(8)_迭代器、生成器、列表解析
- python基础:迭代器与生成器
- python基础教程总结8——特殊方法,属性,迭代器,生成器,八皇后问题
- python基础之生成器迭代器
- Python菜鸟之路:Python基础-生成器和迭代器、递归
- python基础之生成器迭代器
- Python基础-迭代器与yield生成器
- python3基础: 元组tuple、 列表list、 字典dict、集合set。 迭代器、生成器
- Python基础-迭代器和生成器