Python编程学习——生成器
来源:互联网 发布:ib网络是什么意思啊 编辑:程序博客网 时间:2024/06/06 13:08
简介:生成器表达式是列表解析的一个扩展,生成器是特定的函数,允许你返回一个值,然后“暂停”代码执行,稍后恢复。它的语法与列表解析基本相同,不过函数的返回类型不是列表,而是生成器。
生成器表达式与列表解析:
两者的基本语法非常类似,举个例子:
a = [i for i in xrange(5)] # 列表解析b = (i for i in xrange(5)) # 生成器表达式
列表解析返回的是一个列表,生成器表达式返回的是一个生成器,我们用generator.next()方法来访问它的内容。在实际使用中,可以把生成器看成一个一次性的链表。
生成器表达式在大文件处理中有重要的意义,此时列表解析虽然方便,但是却会耗费巨大的内存,在这种情况下,使用生成器就是最好的选择。
举个例子——寻找文件的最长行:
# 列表解析f = open("Your path", "r")lines = [len(x.strip()) for x in f]res = max(lines)f.close()# 生成器表达式f = open("Your path", "r")res = max(len(x.strip()) for x in f)f.close()
生成器与yield关键字:
生成器的语法当然不止表达式一种,否则的话太局限了,如果我们需要编写复杂的生成器,就需要用到yield关键字。
yield关键字的意义有点像return关键字,同样需要在函数中使用,区别在于yield返回的东西被放在一个生成器里,下面是一个简单的生成器例子:
def gen(): yield 1 yield "2222" yield 3.14
使用这个生成器:
>>> type(gen())<generator object gen at 0x7f11128c3 e10>>>> testGen = gen()>>> testGen.next()1>>> testGen.next()'2222'>>> testGen.next()Traceback (most recent call last): File "<stdin>", line 1, in <module>StopIteration
加强特性:
生成器可以是永远运行的,举个例子:
def counter(start = 0): count = start while True: val = yield count print type(val), val if val is not None: count = val else : count += 1count = counter(5)print count.next()print count.next()print count.send(9)print count.next()count.close()
这个生成器使用start为初始值,每次调用next方法进行累加计数。send方法,允许用户重置count值;close方法,结束生成器。
输出:
5<type 'NoneType'> None6<type 'int'> 99<type 'NoneType'> None10
0 0
- Python编程学习——生成器
- python学习——生成器
- 【Python】学习笔记——-4.4、生成器
- <30>python学习笔记——生成器
- Python学习笔记——生成器
- Python——生成器
- python核心编程-生成器
- python高级编程-生成器
- Python高级编程--生成器
- Python学习笔记——生成器,yeild语句
- Python学习(七)——列表生成式、生成器
- python学习——生成器使用杨辉三角
- python学习笔记-函数式编程、迭代器和生成器
- python基础——生成器
- Python 生成器学习
- python学习-生成器
- Python学习十:生成器
- Python学习笔记-生成器
- case用法
- storm 远程过程调用及客户端调用
- 关于javaSE面向对象的一些小知识
- 从Eclipse转移到IntelliJ IDEA一点心得
- 黑马程序员——内部类,异常,Object类
- Python编程学习——生成器
- elasticsearch的研究与使用(二)Search API
- 彻底卸载MYSQL
- Linux中profile、bashrc、bash_profile之间的区别和联系
- Ubuntu 软件安装方法之——简单介绍
- 杭电1018-Big Number(大数)
- The String |
- Tips for SQL and Bash
- LeetCode Remove Linked List Elements