def foo():
print("starting...")
while True:
res = yield 4
print("res:",res)
g = foo()
print(next(g))
print("*"*20)
print(next(g))
程序输出:
starting...
4
********************
res: None
4
*号下边下一次调用,yield没有给res传参,所以res为空,又进入while循环中,“return 4”结束。
如果想要给yield中传递参数怎么做:
def foo():
print("starting...")
while True:
res = yield 4
print("res:",res)
g = foo()
print(next(g))
print("*"*20)
print(g.send(7))
输出结果:
starting...
4
********************
res: 7
4
yield的另一个作用:如果使用List创建一个长度为1000的来列表,会直接申请一个长度1000的空间,十分浪费。但是使用yield就可以解决这个问题:
def foo(num):
print("starting...")
while num < 10:
num = num + 1
yield num
for n in foo(0)
print(n)
输出结果:
starting...
1
2
3
4
5
6
7
8
9
10