工作生活

迭代器、生成器

2019-07-02  本文已影响0人  张明越

迭代器
迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退

可迭代对象

我们已经知道可以对list、tuple、str等类型的数据使用for...in...的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代

以直接作用于 for 循环的数据类型有以下几种:

一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;

一类是 generator ,包括生成器和带 yield 的generator function。

这些可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。

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

生成器不但可以作用于 for 循环,还可以被 next() 函数不断调用并返回下一个值,直到最后抛出 StopIteration 错误表示无法继续返回下一个值了。


迭代器

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

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

iter()函数

生成器都是 Iterator 对象,但 list 、 dict 、 str 虽然是 Iterable ,却不是 Iterator 。

把 list 、 dict 、 str 等 Iterable 变成 Iterator 可以使用 iter() 函数

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

凡是可作用于 next() 函数的对象都是 Iterator 类型

集合数据类型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator ,不过可以通过 iter() 函数获得一个 Iterator 对象。

迭代器什么时候结束:

抛出异常就会结束

面试题:为什么使用迭代器

迭代器能够实现for循环,占用空间小(保存的不是生成这个数列的结果而是生成这个数列的方式)


生成器

一边循环一边计算的机制称为生成器:generator。

创建生成器:

1.把一个列表生成式的[]改成()

2.只要在def中有yield关键字的 就称为 生成器

学习总结:

    使用了yield关键字的函数不再是函数,而是生成器。

    yield关键字的特点:

(1)保存当前运行状态(断点),然后暂停执行,即将生成器(函数)挂起    

(2)将yield关键字后面表达式的值作为返回值返回,此时可以理解为起到了return的作用

    可以使用next()函数让生成器从断点处继续执行,即唤醒生成器(函数)

    Python3中的生成器可以使用return返回最终运行的返回值,而Python2中的生成器不允许使用return返回一个返回值(即可以使用return从生成器中退出,但return后不能有任何表达式)。

使用send唤醒

上一篇 下一篇

猜你喜欢

热点阅读