Python中的yield和Generators(生成器)
心晴的时候,雨也是晴 惊喜 欢迎将本公众号推荐给更多的人,一起进步,共同成长! 特惠:每推荐一个小伙伴加入 《面试指导》 ,自身可以享受 20% 价格减免。 本文目的 解释yield关键字到底是什么,为什么它是有用的,以及如何来使用它。 协程与子例程 我们调用一个普通的Python函数时,一般是从函数的第一行代码开始执行,结束于return语句、异常或者函数结束(可以看作隐式的返回None)。一旦函数将控制权交还给调用者,就意味着全部结束。函数中做的所有工作以及保存在局部变量中的数据都将丢失。再次调用这个函数时,一切都将从头创建。 对于在计算机编程中所讨论的函数,这是很标准的流程。这样的函数只能返回一个值,不过,怎么才能创建能产生一个序列的函数呢?换句话说,这个函数需要能够“保存自己的工作”。 python中的生成器可以实现这一点。 生成器中,我们的函数并没有像通常意义那样返回。常规函数中的return隐含的意思是函数正将执行代码的控制权返回给函数被调用的地方。而"yield"的隐含意思是控制权的转移是临时和自愿的,我们的函数将来还会收回控制权。 生成器(以及yield语句)最初的引入是为了让程序员可以更简单的编写用来产生值的序列的代码。 以前,要实现类似随机数生成器的东西,需要实现一个类或者一个模块,在生成数据的同时保持对每次调用之间状态的跟踪。引入生成器之后,这变得非常简单。