首页 / 知识
关于Python中的yield
2023-11-12 13:40:00
在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor)。
一、迭代器(iterator)
在Python中,for循环可以用于Python中的任何类型,包括列表、元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器
迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration。任何这类的对象在Python中都可以用for循环或其他遍历工具迭代,迭代工具内部会在每次迭代时调用next方法,并且捕捉StopIteration异常来确定何时离开。
使用迭代器一个显而易见的好处就是:每次只从对象中读取一条数据,不会造成内存的过大开销。
比如要逐行读取一个文件的内容,利用readlines()方法,我们可以这么写:
forlineinopen("test.txt").readlines():printline
这样虽然可以工作,但不是最好的方法。因为他实际上是把文件一次加载到内存中,然后逐行打印。当文件很大时,这个方法的内存开销就很大了。
利用file的迭代器,我们可以这样写:
forlineinopen("test.txt"):#usefileiteratorsprintline
这是最简单也是运行速度最快的写法,他并没显式的读取文件,而是利用迭代器每次读取下一行。
二、生成器(constructor)
生成器函数在Python中与迭代器协议的概念联系在一起。简而言之,包含yield语句的函数会被特地编译成生成器。当函数被调用时,他们返回一个生成器对象,这个对象支持迭代器接口。函数也许会有个return语句,但它的作用是用来yield产生值的。
不像一般的函数会生成值后退出,生成器函数在生成值后会自动挂起并暂停他们的执行和状态,他的本地变量将保存状态信息,这些信息在函数恢复时将再度有效
>>>defg(n):...foriinrange(n):...yieldi**2...>>>foriing(5):...printi,":",...0:1:4:9:16:
要了解他的运行原理,我们来用next方法看看:
>>>t=g(5)>>>t.next()0>>>t.next()1>>>t.next()4>>>t.next()9>>>t.next()16>>>t.next()Traceback(mostrecentcalllast):File"",line1,inStopIteration
在运行完5次next之后,生成器抛出了一个StopIteration异常,迭代终止。
再来看一个yield的例子,用生成器生成一个Fibonacci数列:
deffab(max):a,b=0,1whilea
看到这里应该就能理解生成器那个很抽象的概念了吧~~
以上内容为大家介绍了关于Python中的yield,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注我们http://www.mobiletrain.org/
最新内容
相关内容
linux清空信息的命令?
linux清空信息的命令?,信息,系统,设备,情况,命令,暂停,状态,发行,数字,文件,Linux文件系统操作命令1、df命令:用于显示文件系统的磁盘空间使用linux程序的状态命令?
linux程序的状态命令?,系统,状态,服务,情况,软件,进程,数据,基础,命令,信息,Linux系统中用于查看系统进程状态的命令是什么?1、命令是[ps-aux]。linux命令行连数据库?
linux命令行连数据库?,地址,服务,信息,名字,数据库,密码,网络,一致,软件,系统,linux怎么连接mongodb数据库1、在这里使用的是MongoVUE进行连接python中常用的工具有哪些?
python中常用的工具有哪些?,工具,代码,培训,平台,中国,公司,管理,智能,最新,功能,Python是入门编程的不错选择,现在很多人在转行学习编程时选择怎么把数据库导入navicat?
怎么把数据库导入navicat?,软件,信息,密码,管理,数据库,服务,电脑,按钮,类型,文件,Navicat是一个强大的数据库管理工具,它可以连接和管理多种数python怎么检验是否安装和如何安装
python怎么检验是否安装和如何安装pip工具?,工具,培训,电脑,版本,命令,脚本,框架,以下,培训班,一下吧,学习过Python的小伙伴都知道,想要安装Pyt大学生报名Python培训课程的好处是
大学生报名Python培训课程的好处是什么?,培训,企业,社会,项目,行业,工作,时间,技术,都会,素养,一、报名学习前沿技术在IT行业,技术在不断变化和Python中手机端好用的编程工具
Python中手机端好用的编程工具,手机,代码,电脑,软件,灵活,培训,工具,底部,工程,技术,我们写代码的时候,都是在电脑上操作的吗?你知道手机也可线上Python培训和线下有什么不同?
线上Python培训和线下有什么不同?,培训,基础,实战,电脑,项目,教育,时间,地方,初级,技术,学习互联网技术的人越来越多,很多机构都采取线上和线下报名Python培训选择哪种方式比较好
报名Python培训选择哪种方式比较好?,培训,工作,基础,时间,情况,在线,最划算,环境,系统,方式,Python不仅是一种高级的编程语言,而且还是一种应用Python数据分析有哪些重要的库?
Python数据分析有哪些重要的库?,数据,分析,标准,庞大,通用,平台,培训,工具,基础,灵活,众所周知,有很多编程语言都可以应用于数据分析领域,但PythPython数据分析相关的技术
Python数据分析相关的技术,数据,工具,化学,设计,分析,网络,软件,系统,工程,商业,1.机器学习和计算机视觉Crab:灵活、快速的推荐引擎gensim:人性