美文网首页人工智能学习笔记程序员
人人都能学会的python编程教程15:高级特性2

人人都能学会的python编程教程15:高级特性2

作者: 编程老司机 | 来源:发表于2018-05-10 15:19 被阅读80次

生成器

如果你想要一百万个数,而这些数里只有一百个数是你经常要用的,剩下的都几乎不怎么会用到,那么如果直接把这一百万个数全部放在list中是不明智的因为这会浪费较多存储空间,生成器就是为了解决这个问题而生的。

如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

生成器表达式: 通列表解析语法,只不过把列表解析的[]换成()

宝宝都能学会的python编程教程15:高级特性2

我们可以直接打印出list的每一个元素,但我们怎么打印出generator的每一个元素呢?

如果要一个一个打印出来,可以通过next()函数获得generator的下一个返回值:

宝宝都能学会的python编程教程15:高级特性2

当然这种获取值的方法很笨,所以我们一般用循环来迭代生成器的对象

宝宝都能学会的python编程教程15:高级特性2

迭代器

前面我们已经学过了for循环,我们知道for循环可以遍历list、tuple、dict、set、str和生成器。

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

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

>>> from collections import Iterable
>>> isinstance([], Iterable)
> True
>>> isinstance({}, Iterable)
> True
>>> isinstance('abc', Iterable)
> True
>>> isinstance((x for x in range(10)), Iterable)
> True
>>> isinstance(100, Iterable)
> False

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

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

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

Python的for循环本质上就是通过不断调用next()函数实现的,例如:

宝宝都能学会的python编程教程15:高级特性2

相关文章

网友评论

本文标题:人人都能学会的python编程教程15:高级特性2

本文链接:https://www.haomeiwen.com/subject/nkozrftx.html