python中的生成器
来源:互联网 发布:时时彩合买软件 编辑:程序博客网 时间:2024/06/06 13:12
定义
生成器是一次生成一个值的特殊类型函数,可以将其视为可恢复函数。调用该函数将返回一个可用于生成连续 x 值的生成器【Generator】,简单的说就是在函数的执行过程中,yield语句会把你需要的值返回给调用生成器的地方,然后退出函数,下一次调用生成器函数的时候又从上次中断的地方开始执行,而生成器内的所有变量参数都会被保存下来供下一次使用。任何包含yield语句的函数称为生成器。
生成器的使用
在Python中,使用生成器可以很方便的支持迭代器协议。生成器通过生成器函数产生,生成器函数可以通过常规的def语句来定义,但是不用return返回,而是用yield一次返回一个结果,在每个结果之间挂起和继续它们的状态,来自动实现迭代协议。也就是说,yield是一个语法糖,内部实现支持了迭代器协议,同时yield内部是一个状态机,维护着挂起和继续的状态。
例子
def Zrange(n): i = 0 while i < n: yield i i += 1zrange = Zrange(3)print zrangeprint [i for i in zrange]
执行结果
在这个例子中,定义了一个生成器函数,函数返回一个生成器对象,然后就可以通过for语句进行迭代访问了。
其实,生成器函数返回生成器的迭代器。 “生成器的迭代器”这个术语通常被称作”生成器”。要注意的是生成器就是一类特殊的迭代器。作为一个迭代器,生成器必须要定义一些方法,其中一个就是next()。如同迭代器一样,我们可以使用next()函数来获取下一个值。
生成器的执行流程
例子
def Zrange(n): print "beginning of Zrange" i = 0 while i < n: print "before yield",i yield i i += 1 print "after yedld",i print "endding of Zrange"zrange = Zrange(3)print"----------------------------"print zrange.next()print"----------------------------"print zrange.next()print"----------------------------"print zrange.next()print"----------------------------"print zrange.next()print"----------------------------"
执行结果
通过结果可以看到:
1.当调用生成器函数的时候,函数只是返回了一个生成器对象,并没有 执行。
2.当next()方法第一次被调用的时候,生成器函数才开始执行,执行到yield语句处停止,next()方法的返回值就是yield语句处的参数(yielded value)
3.当继续调用next()方法的时候,函数将接着上一次停止的yield语句处继续执行,并到下一个yield处停止;如果后面没有yield就抛出StopIteration异常。
- Python中的生成器
- python中的生成器
- python中的生成器(Generators)
- python中的生成器generator
- python中的生成器
- python中的迭代器与生成器
- python中的迭代器与生成器 .
- 小窥python中的生成器
- python中的生成器(generator)
- python中的迭代器与生成器
- python中的生成器(generator)
- python中的迭代器与生成器
- python中的生成器和迭代器
- python中的迭代器和生成器
- Python中的迭代器和生成器
- python中的生成器和迭代器
- Python中的生成器与迭代器
- 深入理解Python中的生成器
- LeetCode之String题目汇总
- print_r、echo、var_dump三者的区别
- LeetCode 058 Length of Last Word
- 数据中心虚拟化为何离不开大二层网络技术?
- <四>创建Lists和Cards
- python中的生成器
- C#实现MD5加密
- 嵌入式数据库H2的安装与配置
- 151,Bundle Identifier与 Company Identifier
- 计算机学院大学生程序设计竞赛(2015’12)Happy Value(最大生成树)
- PAT程序设计练习——甲级1003(任意两个城市最短距离、Floyd最短路径算法)
- jdbc.properties
- cm下载
- Hadoop Serialization(third edition)hadoop序列化详解(最新版) (1)