x=yield 返回值(如果不写返回值,就是None)
def dog(name):
print("准备吃到东西了%s"%(name))
while True:
#x拿到的是yield接收到的值
x=yield None #x="哈哈哈" #yield可以控制返回值 也可以接收send过来的值,然后给一个变量
#x,y= yield
print("准备吃到东西了%s,返回%s" % (name,x))
g=dog('llj') #函数体内有yield关键字,此时调用函数不会触发运行函数体代码
#print(g) #返回一个生成器对象
# <generator object dog at 0x0000000002136AC0>
#next(g) #next下才执行函数体代码准备吃到东西了llj,遇到yield关键字暂停住
#准备吃到东西了llj
#next(g) #在next下,从刚才yield关键字暂停住哪儿继续往下运行,再遇到yield关键字就暂停住了
#准备吃到东西了llj,返回None
#send之前必须先next(g)下
g.send(None) #等同于next(g)
#准备吃到东西了llj
g.send(None) #g.send([11,22])
# 准备吃到东西了llj,返回None
g.send("哈哈哈") #g.send会将值给当前yield,然后yield会将值赋值给变量x
#准备吃到东西了llj,返回哈哈哈
#g.close()
#g.send("111")#关闭之后无法传值
def dog1(name):
print("准备吃到东西了%s"%(name))
while True:
#x拿到的是yield接收到的值
x=yield 111 #yield可以控制返回值 也可以接收send过来的值,然后给一个变量
print("准备吃到东西了%s,返回%s" % (name,x))
g=dog1('llj') #函数体内有yield关键字,此时调用函数不会触发运行函数体代码
res=next(g) #初始化,遇到yield关键字暂停住,将yield返回值返回
#准备吃到东西了llj
print(res) #返回值
#111
res1=g.send([22,33])
#准备吃到东西了llj,返回[22, 33]
print(res1)
#111
def dog2(name):
print("准备吃到东西了%s"%(name))
l=[]
while True:
#x拿到的是yield接收到的值
x=yield l #yield可以控制返回值 也可以接收send过来的值,然后给一个变量
print("准备吃到东西了%s,返回%s" % (name,x))
l.append(x)
g=dog2('llj') #函数体内有yield关键字,此时调用函数不会触发运行函数体代码
res=next(g) #初始化,遇到yield关键字暂停住,将yield返回值返回
#准备吃到东西了llj
print(res)
#[]
res1=g.send(22)
#准备吃到东西了llj,返回22
print(res1)
#[22]
def func():
print("start....")
x=yield 111
print("哈哈哈哈哈")
yield 222
g=func()
res=next(g) #先next(g)或g.send(None),暂停到当前x=yield 111这块,将当前yield返回值返回
print(res)
#111
res=g.send("啦啦") #从当前x=yield 111这块将g.send("啦啦")值赋值给yiled,然后yield赋值给x x="啦啦" 111,然后继续往下执行代码,遇到yield关键字暂停住
#哈哈哈哈哈
print(res) #将暂停到yield 222 返回值返回
#222