博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
人人都能学会的python编程教程15:高级特性2
阅读量:6799 次
发布时间:2019-06-26

本文共 974 字,大约阅读时间需要 3 分钟。

生成器

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

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

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

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

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

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

迭代器

前面我们已经学过了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()函数实现的,例如:

转载于:https://juejin.im/post/5af3f89451882567382f9e0f

你可能感兴趣的文章
Windows 7下Git SSH 创建Key【待解决?】
查看>>
阿里云服务器Linux CentOS安装配置(七)域名解析
查看>>
最长公共前缀---简单
查看>>
课程引言作业一
查看>>
like 大数据字段 查询慢
查看>>
JSON 数据格式
查看>>
Django----解决跨域
查看>>
SQL聚合函数
查看>>
Eclipse配色方案
查看>>
字符编码,文件处理
查看>>
Nginx配置文件解析
查看>>
Deep learning:二十六(Sparse coding简单理解)
查看>>
STL中rotate算法的理解
查看>>
KnockOutJs初次体验
查看>>
数据库中函数
查看>>
爬虫综合大作业
查看>>
[shell命令] ln 将文件链接到其他目录下
查看>>
hibernate框架
查看>>
MapperScannerConfigurer
查看>>
下载本 WebEnh博客 安卓APP
查看>>