def h():
print("nihao"),
m = yield 2
print(m)
d = yield 12
print(d)
aaa = yield 13
print("jieshule!!!")
c = h()
m = next(c)
d = c.send("caiqing")
aaa = c.send("xixi")
print(m, d, aaa)
# 控制台输出
# nihao
# caiqing
# xixi
# 2 12 13
# 1、有yield的函数已经成为一个生成器了,并且,直接调用函数是不会执行生成器里面的代码,只有使用next()或者send(),才会被执行生成器里面的函数。
# 2、第一次使用next()的时候,代码会执行到第一个yield(并且获取了yield 返回值 2),也就是本文中的 m = yield 2 ,后面的print m没有被执行,
# 然后 执行d = c.send("caiqing")
# 3、send()可以看来,是用来传递第一个参数,也就是将send()里面的内容传递给m ,也就是m = 参数值,所以print m 最后输出的是send(),括号里面的值。”caiqing“,以此类推。
# 总结,可以理解为,next()和send()其实原理都差不多,都是从当前执行到下一个yield(不包含下一个yield,就算下一个前面有print,但是print 后面没有yield,也不会去执行。)
本博客源码Github地址:
请随手给个star,谢谢!