Python中yield、xrange、生成器概念

Heidi ·
更新时间:2024-11-14
· 754 次阅读

概述

要理解yield,需要先理解生成器;

要理解生成器,需要先理解迭代。

逐个获取元素的过程,就是迭代

函数中的return

函数必须有一个返回值列于return之后,标志着函数的结束。一旦结束,那么这个函数中产生的一切变量都会被消除。

其一个扩展功能:暂停函数,并返回当前坐在地方的值,当接收到继续的命令时继续向前。换个角度说,就是return返回一个值,并且记住这个返回的位置。

range()函数

*range()*函数干的事情描述为:先给一个数,当消化完之后,再在前一个数的基础上拿出另一个数。

range()函数的缺点是,会先生成一个list,然后从这个list第一个开始向后一个一个给出。生成list过程存在风险:如果数据量特别大,这个list就太大了。*xrange()*应运而生。

xrange()是一个生成器(内部就包含了yield)。

生成器,可以看作一个能够生成你所需要序列的函数。满足一种场景:记住当前的数、当前的地址,查看这个数是否符合要求,如果不符合,就继续从这个数、这个地址基础上计算下一个数。

yield

yield的用法起源于对一般function中return的扩展。

yield的作用就是把一个函数变成一个generator,Python解释器会把带有yield的函数视为一个generator。

def function_name(): print('函数内容') yield # 只要yield出现在函数内部,这个函数就被视为一个generator

当采用yield,一个函数function_name被转化成generator之后,这个function_name就可以被用于for item in function_name语句上。

functiongenerator的区别,在于*next()send()*这两个函数。

简单理解,用生成器做迭代,只需要一个一个往后走,不需要像range()一样先建立一个可能很大而无用的索引。

Reference python 中 yield 用法的总结 Improve Your Python: ‘yield’ and Generators Explained
作者:Quant_Learner



生成器 yield Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号