yield的可以定义迭代对象的返回值,可以看做类似于注解一类的标识
当满足出发条件时,即调用__next__()方法时,自动调用yield修饰的值,并进行返回
def mrange(start=0,end,step=1):
while start < end:
yield start
start += 1
利用yield进行返回的值,必定是一个迭代对象
同时,作为一个返回值的方法,yield不仅可以返回内部定义修饰的值,也可以传入参数,从外部定义返回的值
def get():
while True:
receive = yield
print('receive is {}'.format(receive))
首先,通过__next__()触发,执行yield的传值功能
然后外部调用send()方法进行yield返回值的传入,就可以通过外部传入影响内部的操作
借由yield,通过__next__()的激活,send()的传入就可以在后面的语句中进行操作,实现生产者send(),消费者模式
简单的实现一种异步的操作
a = get()
a.__next__()
a.send('ok')
注意:
1)yield包含了返回的意思,所以不能return yield
2)函数返回后,操作就会结束,所以利用这种方法不能进行返回,并且操作要定义在while True中
3)这种方法下,只会在程序步骤中阻塞,语句执行完毕,即使是while True中,程序也会结束,可以多次的__next__()和send(),但是语句执行完毕,不再操作时,函数会自动退出,不会一直阻塞
def get(name):
while True:
receive = yield
print('name:{}\treceive is {}'.format(name, receive))
a = get('a')
a.__next__()
b = get('b')
b.__next__()
for value in range(10):
a.send(value)
b.send(value)