python中yield是什么意思

Python021

python中yield是什么意思,第1张

一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。

具体,请参考下以下资料:

http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/

yield的用法是:记住上一次返回时在函数体中的位置,调用此函数从上一次返回的位置开始执行。 

send的用法时:send()方法返有一个参数,该参数指定的是上一次被挂起的yield语句的返回值。 

区别:当send()的参数为None时,正好与next方法等价。在调用send()方法时,要么先调用一次next()

到函数挂起的位置,或者直接send(None)。

输出结果为:

yield

yield是用于生成器。什么是生成器,你可以通俗的认为,在一个函数中,使用了yield来代替return的位置的函数,就是生成器。它不同于函数的使用方法是:函数使用return来进行返回值,每调用一次,返回一个新加工好的数据返回给你;yield不同,它会在调用生成器的时候,把数据生成object,然后当你需要用的时候,要用next()方法来取,同时不可逆。你可以通俗的叫它"轮转容器",可用现实的一种实物来理解:水车,先yield来装入数据、产出generator object、使用next()来释放;好比水车转动后,车轮上的水槽装入水,随着轮子转动,被转到下面的水槽就能将水送入水道中流入田里。

def func3():

for i in range(1,5):

yield i#装入

gob = func3()#generator 类型

print next(gob)#1释放的第一个装入的数据,(先入先出)

print next(gob)#2

print next(gob)#3

print next(gob)#4

print next(gob)#报错

复制代码

return

这个大家都知道了,一句话,return既可以终止函数的执行,也可以返回函数加工处理好的数据,只是这个数据需要一个载体来进行保存,通常是变量。非条件判断的时候,只要遇见return,函数就结束执行。