yield是python中定义为生成器函数,其本质是封装了 __iter__和__next__方法 的迭代器;
与return返回的区别:return只能返回一次值,函数就终止了,而yield能多次返回值,每次返回都会将函数暂停,下一次next会从上一次暂停的位置继续执行;
以下用示例说明:
def test(a,b):
print("from test(),a+b=%d" %(a+b))
return("我是return返回的")
def test_yield(a,b): #函数体中有yield关键字,函数就可以称为生成器函数
print("from test_yield,a+b=%d" %(a+b))
yield("我是第一次碰到yield关键字返回的") #程序运行时碰到yield,退出函数体并记录位置,下次调用跳过之前运行的代码
print("from test_yield,a*2=%d" %(a*2))
yield("我是第二次调用碰到yield关键字返回的")
print(test(11,33))
g = test_yield(11,33)
print(next(g)) #通过next()调用生成器函数
print(next(g)) #第二次调用生成器函数
'''
执行结果:
from test(),a+b=44
我是return返回的
from test_yield,a+b=44
我是第一次碰到yield关键字返回的
from test_yield,a*2=22
我是第二次调用碰到yield关键字返回的
'''