零基础学python-19.5 重放迭代器:生成器yield

这一章节我们来讨论一些生成器yield

1.yield的特性:延迟结果创建

* 生成器函数:也是使用def定义,但是使用yield返回,而且每次返回只是返回一个结果,在每次产生结果之间挂起和继续它们的状态(就是当返回有三个结果,第一个结果返回了,但是第二个结果没有返回,但是由于是yield,它记录下返回第一个结果时所有作用域以及变量的状态,因此,在当需要返回第二个结果的时候,它将会继续刚才的状态计算下去)。

>>> def test(N):
	for x in range(N):
		yield x

>>> x=test(3)
>>> next(x)
0
>>> next(x)
1
>>> next(x)
2
>>> 

从上面的代码可以看见,yield返回一个迭代器,而且当它返回一个结果的时候,它会自动记录当前作用域以及变量状态,使得下一个结果产生的时候可以继续上一次计算的状态。

2.yield vs return

yield的例子继续沿用上面的代码:

>>> def test(N):
	for x in range(N):
		yield x

>>> x=test(3)
>>> next(x)
0
>>> next(x)
1
>>> next(x)
2

下面我们给出return的代码:

>>> def test(N):
	for x in range(N):
		return x

>>> test(3)
0
>>> x=test(3)
>>> next(x)
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    next(x)
TypeError: 'int' object is not an iterator
>>> x
0
>>> 

对比上面两组代码,yield就不用再说了,返回一个迭代器,而return,返回的是一个整数,而且在执行完第一次之后他就跳出了循环,不再继续

生成器函数与常规函数都是一样,也是使用def定义,只是在创建的时候,它自动实现迭代协议

总结:这一章节主要介绍了生成器yield的特性,以及跟return之间的区别

这一章节就说到这里,谢谢大家

------------------------------------------------------------------

点击跳转零基础学python-目录

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 11:54:31

零基础学python-19.5 重放迭代器:生成器yield的相关文章

[零基础学python]集成开发环境(IDE)

当安装好python之后,其实就已经可以进行开发了.下面我们开始写第一行python代码. 值得纪念的时刻:Hello world 如果是用windows,请打开CMD,并执行python. 如果是UNIX类的,就运行shell,并执行python. 都会出现如下内容: Python 2.7.6 (default, Nov 13 2013, 19:24:16) [GCC 4.6.3] on linux2 Type "help", "copyright", "

[零基础学python]开始真正编程

通过对四则运算的学习,已经初步接触了Python中内容,如果看官是零基础的学习者,可能有点迷惑了.难道在IDE里面敲几个命令,然后看到结果,就算编程了?这也不是那些能够自动运行的程序呀? 的确.到目前位置,还不能算编程,只能算会用一些指令(或者叫做命令)来做点简单的工作.并且看官所在的那个IDE界面,也是输入指令用的. 列位稍安勿躁,下面我们就学习如何编写一个真正的程序.工具还是那个IDLE,但是,请大家谨记,对于一个真正的程序来讲,用什么工具是无所谓的,只要能够把指令写进去,比如用记事本也可以

[零基础学python]为什么要开设本栏目

这个栏目的名称叫做"零基础学Python". 现在网上已经有不少学习python的课程,其中也不乏精品.按理说,不缺少我这个基础类型的课程了.但是,我注意到一个问题,不管是课程还是出版的书,大多数是面向已经有一定编程经验的人写的或者讲的,也就是对这些朋友来讲,python已经不是他们的第一门高级编程语言.据我所知,目前国内很多大学都是将C之类的做为学生的第一门语言. 然而,在我看来,python是非常适合做为学习高级语言编程的第一门语言的.有一本书,名字叫<与孩子一起学编程>

[零基础学python]玩转字符串(1)

如果对自然语言分类,有很多中分法,比如英语.法语.汉语等,这种分法是最常见的.在语言学里面,也有对语言的分类方法,比如什么什么语系之类的.我这里提出一种分法,这种分法尚未得到广大人民群众和研究者的广泛认同,但是,我相信那句"真理是掌握在少数人的手里",至少在这里可以用来给自己壮壮胆. 我的分法:一种是语言中的两个元素(比如两个字)和在一起,出来一个新的元素(比如新的字):另外一种是两个元素和在一起,知识两个元素并列.比如"好"和"人",两个元素和

[零基础学python]玩转字符串(2)

上一章中已经讲到连接两个字符串的一种方法.复习一下: >>> a= 'py' >>> b= 'thon' >>> a+b 'python' 既然这是一种方法,言外之意,还有另外一种方法. 连接字符串的方法2 在说方法2之前,先说明一下什么是占位符,此前在讲解变量(参数)的时候,提到了占位符,这里对占位符做一个比较严格的定义: 来自百度百科的定义: 顾名思义,占位符就是先占住一个固定的位置,等着你再往里面添加内容的符号. 根据这个定义,在python里面

[零基础学python]啰嗦的除法

除法啰嗦的,不仅是python. 整数除以整数 看官请在启动idle之后,练习下面的运算: >>> 2/5 0 >>> 2.0/5 0.4 >>> 2/5.0 0.4 >>> 2.0/5.0 0.4 看到没有?麻烦出来了,如果从小学数学知识除法,以上四个运算结果都应该是0.4.但我们看到的后三个符合,第一个居然结果是0.why? 因为,在python里面有一个规定,像2/5中的除法这样,是要取整.2除以5,商是0(整数),余数是5(整

[零基础学python]一些关于Python的事情

如同学习任何一种自然语言比如英语.或者其它编程语言比如汇编(这个我喜欢,可惜多年之后,已经好久没有用过了)一样,总要说一说有关这种语言的事情,有的可能就是八卦,越八卦的越容易传播.当然,以下的所有说法中,难免充满了自恋,因为你看不到说Python的坏话.这也好理解,如果要挑缺点是比较容易的事情,但是找优点,不管是对人还是对其它事务,都是困难的.这也许是人的劣根之所在吧,喜欢挑别人的刺儿,从而彰显自己在那方面高于对方.特别是在我们这个麻将文化充斥的神奇地方,更多了. 废话少说点(已经不少了),进入

[零基础学python]python中的四则运算

一提到计算机,当然现在更多人把她叫做电脑,这两个词都是指computer.不管什么,只要提到她,普遍都会想到她能够比较快地做加减乘除,甚至乘方开方等.乃至于,有的人在口语中区分不开计算机和计算器. 那么,做为零基础学习这,也就从计算小学数学题目开始吧.因为从这里开始,数学的基础知识列为肯定过关了. 复习 还是先来重温一下伟大时刻,打印hello world. 打开电脑,让python idle运行起来,然后输入: >>> print 'Hello, World' Hello, World

零基础学python》(第二版)

---恢复内容开始--- 零基础学python>(第二版) python学习手册 可以离线下载,  .chn格式, 插入小幽默笑话,在学习累的时候看看笑话 放松一下 欢迎下载转载,请注明出处,谢谢 下载地址          http://files.cnblogs.com/files/xuchunlin/%E3%80%8A%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%AD%A6python%E3%80%8B%EF%BC%88%E7%AC%AC%E4%BA%8C%E7%89%88

[零基础学python]初识永远强大的函数

函数,对于人类来讲,能够发展到这个数学思维层次,是一个飞跃.可以说,它的提出,直接加快了现代科技和社会的发展,不论是现代的任何科技门类,乃至于经济学.政治学.社会学等,都已经普遍使用函数. 下面一段来自维基百科(在本教程中,大量的定义来自维基百科,因为它真的很百科):函数词条 [函数这个数学名词是莱布尼兹在1694年开始使用的,以描述曲线的一个相关量,如曲线的斜率或者曲线上的某一点.莱布尼兹所指的函数现在被称作可导函数,数学家之外的普通人一般接触到的函数即属此类.对于可导函数可以讨论它的极限和导