python yield from (一)
2024-09-07 14:02:24
1. yield from 会抛出iterator中所有的值;而yield只是抛出传进来的值,如果是值,就抛出值,如果是iterator对象,抛出iterator对象
def g1(iterable):
yield iterable def g2(iterable):
yield from iterable for value in g1(range(10)):
print(value)
for value in g2(range(10)):
print(value)
输出:
range(0, 10)
0
1
2
3
4
5
6
7
8
9
2. yield from会在调用方与子生成器之间建立一个双向通道
final_result = {} def sales_sum(pro_name): # 子生成器
total = 0
nums = []
while True:
x = yield
print(pro_name+"销量: ", x)
if not x:
break
total += x
nums.append(x)
return total, nums def middle(key): # 委托生成器
while True:
final_result[key] = yield from sales_sum(key)
print(key+"销量统计完成!!.") def main(): # 调用方
data_sets = {
"bobby牌面膜": [1200, 1500, 3000],
"bobby牌手机": [28,55,98,108 ],
"bobby牌大衣": [280,560,778,70],
}
for key, data_set in data_sets.items():
print("start key:", key)
m = middle(key)
m.send(None) # 预激middle协程
for value in data_set:
m.send(value) # 给协程传递每一组的值
m.send(None)
print("final_result:", final_result) if __name__ == '__main__':
main()
输出:
start key: bobby牌面膜
bobby牌面膜销量: 1200
bobby牌面膜销量: 1500
bobby牌面膜销量: 3000
bobby牌面膜销量: None
bobby牌面膜销量统计完成!!.
start key: bobby牌手机
bobby牌手机销量: 28
bobby牌手机销量: 55
bobby牌手机销量: 98
bobby牌手机销量: 108
bobby牌手机销量: None
bobby牌手机销量统计完成!!.
start key: bobby牌大衣
bobby牌大衣销量: 280
bobby牌大衣销量: 560
bobby牌大衣销量: 778
bobby牌大衣销量: 70
bobby牌大衣销量: None
bobby牌大衣销量统计完成!!.
final_result: {'bobby牌面膜': (5700, [1200, 1500, 3000]), 'bobby牌手机': (289, [28, 55, 98, 108]), 'bobby牌大衣': (1688, [280, 560, 778, 70])}
最新文章
- TaintDroid剖析之Native方法级污点跟踪分析
- Eclipse界面设置与常用技巧
- wpa_supplicant移植
- storm入门教程 第四章 消息的可靠处理【转】
- Linux系统安装VM-Tools
- Swift Array copy 的线程安全问题
- 【01背包】HDU 2602 Bone Collector (模板题)
- Gentoo网络管理方法总结
- 自学LinkedBlockingQueue源码
- 南方IT学校期末PCB结课项目考试(实操)说明书
- 关于SQL SERVER中的FLOAT转换为VARCHAR
- English trip -- VC(情景课)10 A Get ready 预备课
- os.path.join 用法
- 数据库们~MySQL~MongoDB~Redis
- java_基础——用代码编译.java文件+加载class文件
- Swift学习笔记 - Swift属性只读
- 1004: [HNOI2008]Cards burnside定理
- BootStrap:
- Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net
- JAVAOOP异常
热门文章
- JXL工具包对Excle文件操作
- 聊聊 Vue 中 title 的动态修改
- SpringBoot(三) 配置文件 篇章
- springmvc学习笔记三:整合JDBC,简单案例==数据库事务配置(切面)
- 创建Npm脚手架
- QT5.5+VS2013编译安装QtCharts (ZZ)
- 1042. Flower Planting With No Adjacent
- ICMP重定向 Redirect netwox libpcap netwag
- 从server.xml看Tomcat容器的层次结构
- python 连接数据库,查询结果写入数据到excel