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

本文共 922 字,大约阅读时间需要 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()函数实现的,例如:

转载地址:http://dzzxx.baihongyu.com/

你可能感兴趣的文章
java.lang.NoClassDefFoundError: org/apache/avro/ipc/Responder
查看>>
利用JasperReport+iReport进行Web报表开发
查看>>
JSON and Microsoft Technologies(翻译)
查看>>
ylbtech-LanguageSamples-ConditionalMethods(条件方法)
查看>>
js 判断各种数据类型
查看>>
【leetcode】Find Peak Element ☆
查看>>
linux:sed高级命令之n、N(转)
查看>>
触发器更新多条数据
查看>>
微信公众平台原创声明功能公测 自媒体原创保护的福音
查看>>
ADF_Advanced ADF系列2_Fusion应用的客制和个性化(Part2)
查看>>
php_linux_centos6.4_安装mysql_apache_php
查看>>
Myeclipse或Eclipse中搭建Easyui环境
查看>>
(转)数字格式化函数:Highcharts.numberFormat()
查看>>
我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
查看>>
CCNA2.0笔记_ipv6的EIGRP
查看>>
最短路径算法整理(二)
查看>>
java的基本数据类型
查看>>
Android IOS WebRTC 音视频开发总结(二四)-- p2p调用堆栈
查看>>
Java面向对象基础二
查看>>
PR使用技巧
查看>>