1 2 3 4

yield表达式

生成器的高级玩法之yield挂起函数:yield的表达式形式(了解***)
x=yield 返回值

函数中有yield调用函数返回的是迭代器对象
迭代器对象.send(None) 等同于next(迭代器对象)
迭代器对象.send(值)相当于值传给yield yield再赋值给变量,碰到下一个yield又会将函数挂起
迭代器对象.close()关闭后无法传值


案例

# 一:
# def dog(name):
# print('道哥%s准备吃东西啦...' %name)
# while True:
# # x拿到的是yield接收到的值
# x = yield # x = '肉包子'
# print('道哥%s吃了 %s' %(name,x))
#
#
# g=dog('alex')
# g.send(None) # 等同于next(g)
#

# g.send(['一根骨头','aaa'])
# # g.send('肉包子')
# # g.send('一同泔水')
# # g.close()
# # g.send('1111') # 关闭之后无法传值


# 二:
def dog(name):
food_list=[]
print('道哥%s准备吃东西啦...' %name)
while True:
# x拿到的是yield接收到的值
x = yield food_list # x = '肉包子'
print('道哥%s吃了 %s' %(name,x))
food_list.append(x) # ['一根骨头','肉包子']
#
# g=dog('alex')
# res=g.send(None) # next(g)
# print(res)
#
# res=g.send('一根骨头')
# print(res)
#
# res=g.send('肉包子')
# print(res)
# # g.send('一同泔水')




def func():
print('start.....')
x=yield 1111 # x='xxxxx'
print('哈哈哈啊哈')
print('哈哈哈啊哈')
print('哈哈哈啊哈')
print('哈哈哈啊哈')
yield 22222

g=func()
res=next(g)
print(res)

res=g.send('xxxxx')
print(res)
posted @ 2020-03-25 16:37  臭弟弟d  阅读(269)  评论(0编辑  收藏  举报