Python之生成器、迭代器
2016-01-28 17:39
417 查看
一.生成器
形如K=[i*i for i in range(8)]的列表推导式可以用一行代码实现循环语句,使得Python代码更加简洁。但列表推导式也存在一个问题,就是它必须要先构造一个完整的列表,故其容量受内存大小的限制,而且并不是其中的每一个元素都会被用到,有时候仅仅用到前面几个,这就会造成内存资源的浪费。最近自己也在补计算机方面的知识,要加强对内存资源的利用的敏感度。而生成器仅仅保存一个算法,列表元素可以根据算法逐个推导出来而不需要构造整个列表。它一次生成一个元素,而不是一下子填满内存,这样极大地节省了内存空间。把[ ]改成( )就得到一个简单的生成器了,如gen=(i * i for i in range(8)),这也被称为生成器表达式。只要用next()函数就可以逐个调出生成器中产生的元素。从另一个角度看,如果一个函数中包含关键字yield,它就不再是普通的函数了,瞬间被提升为generator。yield关键字拥有独一无二的停止执行、保存状态和继续执行的能力。变成generator的函数,每次调用next()的时候执行,遇到yield后返回,而下次执行时从上次的yield语句处继续执行。
计算前10个自然数平方和的迭代器:
sum(x*x for i in range(10))
实现杨辉三角的迭代器:
def triangles(): x=[1] while True: yield x x=[1]+[x[i]+x[i+1] for i in range(len(x)-1)]+[1]
二.迭代器
生成器是迭代器的一种,凡是可以被next()函数调用并 不断返回下一个值的对象都被称为迭代器。迭代器表示的是一个数据流,我们不需要知道这个数据流的具体长度,只要能通过next()函数产生下一个元素就可以了。迭代器协议被分成两个部分,一部分是生产者,另一部分是消费者,生产者那里可以提供数据,尽管我们不知道这些数据的总量有多少,一次只提供一个元素给消费者。迭代器与可迭代对象不是一个概念,我们把可以直接作用于for循环的对象统称为可迭代对象,Python中的列表、字符串、字典、元组等都是可迭代对象,但它们不是迭代器,要把它们变成迭代器很容易,放到iter()函数中就可以了。
相关文章推荐
- python2.5_1.5_通过指定的端口和协议找到服务名
- python生成验证码图片代码分享
- Python 自学笔记《1》
- python2.7_1.4_将IPV4地址转换成不同的格式
- python 爬虫——登录知乎
- Python 之ConfigParser
- 【python】异常处理
- python2.7_1.3_获取远程设备的IP地址
- Python集合set与frozenset的区别
- python2.7_1.2_打印设备名和IPv4地址
- Python渗透测试工具合集
- python自动化运维 第1章系统基础信息详解 第一节
- Python 练手程序合集(一)
- python中的单引号,双引号和三双引号的区别
- python天气预报
- python2.7_1.14_编写一个简单的回显客户端/服务器应用
- java和python的SHA-1形式RSA加密方式代码互通
- ubuntu下python3.4安装numpy
- python3 mail
- python wsgi 详解浏览器请求过程