1、yield from让生成器(带yield函数),能简易的在其他函数中直接调用
2、以下为代码,htest为生成器generator,itest通过yield from调用htest,itest也是生成器。创建itest实例不断获取数据,当生成器结束时,抛出StopIteration异常(由itest抛出)。参考:点击打开链接
3、yield from也可以通过变量接收返回值。变量接收的值由htest通过return返回。
def htest():
i = 1
while i < 4:
print('are you ok?')
n = yield i+1
if i == 3:
return 100
print ('[htest]: n=%s'%n)
print('[htest]: i=%s'%i)
i += 1
def itest():
print('what is the wrong')
val = yield from htest()
print('[itest]: %s'%val)
t = itest()
k = t.send(None)
print('get k --> %s'%k)
j = 0
while j < 8:
j += 2
try:
m=t.send(j)
print('get m --> %s'%m)
except StopIteration as e:
print('异常了')
实验结果:
由结果可以看出,
执行k=t.send(None),htest中将第一个yield的i+1的值2返回给k。
while循环阶段,将j的值通过itest传递给htest中的yield表达式的+1。
当j=0,j+=2,j=2,通过t.send(j)传递到htest中,此时htest中n=yield i+1,即n=2。
此时的i为1(跟n值无关,由htest中初始i=1控制)。
执行
print ('[htest]: n=%s'%n)
print('[htest]: i=%s'%i)
i += 1
后,继续循环,直到下一个yield出现。
print('are you ok?')
n = yield i+1
此时i=2,将i+1的值3返回给m。
当j=2,j+=2...依此类推