要理解yield,需要先理解生成器;
要理解生成器,需要先理解迭代。
逐个获取元素的过程,就是迭代。
函数中的return函数必须有一个返回值列于return之后,标志着函数的结束。一旦结束,那么这个函数中产生的一切变量都会被消除。
其一个扩展功能:暂停函数,并返回当前坐在地方的值,当接收到继续的命令时继续向前。换个角度说,就是return返回一个值,并且记住这个返回的位置。
range()函数*range()*函数干的事情描述为:先给一个数,当消化完之后,再在前一个数的基础上拿出另一个数。
range()函数的缺点是,会先生成一个list,然后从这个list第一个开始向后一个一个给出。生成list过程存在风险:如果数据量特别大,这个list就太大了。*xrange()*应运而生。
xrange()是一个生成器(内部就包含了yield)。
生成器,可以看作一个能够生成你所需要序列的函数。满足一种场景:记住当前的数、当前的地址,查看这个数是否符合要求,如果不符合,就继续从这个数、这个地址基础上计算下一个数。
yieldyield的用法起源于对一般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语句上。
function与generator的区别,在于*next()和send()*这两个函数。
简单理解,用生成器做迭代,只需要一个一个往后走,不需要像range()一样先建立一个可能很大而无用的索引。
Reference python 中 yield 用法的总结 Improve Your Python: ‘yield’ and Generators Explained