断点设置在第2行和第13行,debug时程序停留在13行,F5进入yield_test generator,定位到第2行, F6(单步调试)走到第3行,此时j = 0, F5进入函数call(),由于j = 0, call函数返回0,也就是走完第10行后,程序回到第3行,F5后进入第13行,其实就是call返回值赋值给第13行的i, 单步F6运行第11行和12行,在第12行 i = 0,该0就是 call返回的0值, 然后F6定位到了第4行, j = 0, 然后进入第2行,一直循环……, 第二行的for循环结束后运行第5行和第6行,程序运行结束
程序运行的结果如下:
yield的一个小用法:
list1= ['a','b','c']
list2 = ['1','2']
list3 = ['sf', 'wh']
def TestYield():
for element1 in list1:
yield element1
for element2 in list2:
yield element2
for element3 in list3:
yield element3
if __name__ == '__main__':
ele = TestYield()
for e in ele:
print(e)
其实是想表达一个函数中可以不止一个yield, 对于多个列表可以逐一遍历