1.4 理解Python中使用yield进行迭代
yield从字面意思来看,就是生产的意思,在python中它与return一样是一个关键字,也与return一样会返回值。但是不同于return的是:
yield关键字必须要配合迭代使用,一般使用for ... in ...来进行n次迭代.如果函数
fun()里调用了yield关键字则可以看成fun()函数return了n个(取决于迭代次数)返回值,返回值为yield后面的值.由于
fun()函数是有n个返回值,所以必须使用迭代获取该函数的返回值,每迭代一次遇到yield时就返回yield后面(右边)的值,且很关键的是下一次迭代时从上一次迭代遇到的yield后面的代码(下一行)开始执行。
总结一句话理解
yield就是:yield就是return返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后(下一行)开始。
举个栗子说明:
def yiled_test(n):
for i in range(n):
yield i*2
# 下一次迭代时,从下面的print('i=',i)开始执行
print('i in the yield_test',i)
print('Finish at the end of yiled_test')
if __name__ == '__main__':
# 必须使用迭代来获取yield_test()函数返回值
for i in yiled_test(5):
print('i in the main',i)上面的代码运行先后顺序为:
进入main中执行
yiled_test(5),将5作为形参传递给yield_test函数,开始执行该函数开始执行
for i in range(5)循环迭代,第一次返回0*2给main中的循环for i in yiled_test(5)main中的i获值为第一次返回值0*2, 执行print函数print('i in the main',i)继续第二次迭代,跳回
yield代码的下一行开始执行,即print('i in the yield_test',i),然后开始继续本次的迭代yield i*2,即返回1*2给main中的循环for i in yiled_test(5),此时i获值为2依次循环迭代,直至5次迭代完成。
运行结果为:
$ python yield_test.py
i in the main 0
i in the yield_test 0
i in the main 2
i in the yield_test 1
i in the main 4
i in the yield_test 2
i in the main 6
i in the yield_test 3
i in the main 8
i in the yield_test 4
Finish at the end of yiled_testLast updated