def f():
a,b=1,1
while True:
v=(yield a)
if v:
a=v
a,b=b,a+b
a=f()
for i in range(5):
print(a.__next__())
print(a.send(50))
print(next(a))
>>1
>>1
>>2
>>3
>>5
>>8 #按理说这里应该是50才对但为什么是8??实际上是当我使用a.send(50)时相当与使用一次next(),
#首先注意的是:再次执行程序是从yield之后的语句开始执行的,等再次执行一次yield之后结束。
#send会将我们传入的值当作上次执行保留的值使用。所以如上面程序,50给了a没错,
#但是a,b=b,a+b将b给了a等执行yield时就输出了8,当再执行next()时就是输出58了。
>>58
上面的函数是生成斐波那契数列。使用send()方法改变了数列的输出顺序。主要的目的是探究send()的使用方法。