python 生成器协程运算实例
发布时间 - 2026-01-11 03:06:08 点击率:次一、yield运行方式

我们定义一个如下的生成器:
def put_on(name):
print("Hi {}, 货物来了,准备搬到仓库!".format(name))
while True:
goods = yield
print("货物[%s]已经被%s搬进仓库了。"%(goods,name))
p = put_on("bigberg")
#输出
G:\python\install\python.exe G:/python/untitled/study4/test/double.py
Process finished with exit code 0
当我们把一个函数通过yield转换成生成器,直接运行函数是不会出现结果返回的。因为此时函数已经是个生成器了,我们要通过next()来取得值,并且在遇到yield时再次跳出函数。
print(type(p)) #输出 <class 'generator'>
我们添加next()方法:
def put_on(name):
print("Hi {}, 货物来了,准备搬到仓库!".format(name))
while True:
goods = yield #遇到yield中断
print("货物[%s]已经被%s搬进仓库了。"%(goods,name)) #中断后运行部分
p = put_on("bigberg")
p.__next__()
#输出
Hi bigberg, 货物来了,准备搬到仓库!
此时函数中断在 goods = yield 的地方,当我们再次调用next()函数时,函数只会运行中断以后的内容,即上例中的yield下面部分。
我们再添加一个next():
def put_on(name):
print("Hi {}, 货物来了,准备搬到仓库!".format(name))
while True:
goods = yield
print("货物[%s]已经被%s搬进仓库了。"%(goods,name))
p = put_on("bigberg")
p.__next__()
p.__next__()
#输出
Hi bigberg, 货物来了,准备搬到仓库!
货物[None]已经被bigberg搬进仓库了。
我们可以第二次next()运行的是yield下面的部分内容,但是并没有给goods传值,所以货物是 None。
小结:
通过yield将函数转换为生成器,需要使用next()方法才能运行
yield只是保留函数的中断状态,再次调用next()会执行yield后面的部分
yield如果没有返回值,会返回一个None空值
二、send()传值
def put_on(name):
print("Hi {}, 货物来了,准备搬到仓库!".format(name))
while True:
goods = yield
print("货物[%s]已经被%s搬进仓库了。"%(goods,name))
p = put_on("bigberg")
p.__next__()
p.send("瓜子")
#输出
Hi bigberg, 货物来了,准备搬到仓库!
货物[瓜子]已经被bigberg搬进仓库了。
小结:
__next__()只是调用这个yield,也可以说成是唤醒yield,但是不不会给yield传值。
send()方法调用yield是,能给yield传值
使用send()函数之前必须使用__next__(),因为先要中断,当第二次调用时,才可传值。
def put_on(name):
print("Hi {}, 货物来了,准备搬到仓库!".format(name))
while True:
goods = yield
print("货物[%s]已经被%s搬进仓库了。"%(goods,name))
p = put_on("bigberg")
p.__next__()
p.send("瓜子")
p.send("花生")
p.send("饼干")
p.send("牛奶")
#多次调用send()
Hi bigberg, 货物来了,准备搬到仓库!
货物[瓜子]已经被bigberg搬进仓库了。
货物[花生]已经被bigberg搬进仓库了。
货物[饼干]已经被bigberg搬进仓库了。
货物[牛奶]已经被bigberg搬进仓库了。
三、单线程实现并行效果(协程)
import time
def put_on(name):
print("Hi {}, 货物来了,准备搬到仓库!".format(name))
while True:
goods = yield
print("货物[%s]已经被%s搬进仓库了。"%(goods,name))
def transfer(name):
p = put_on('A')
p2 = put_on('B')
p.__next__()
p2.__next__()
print("%s将货物送来了!"%name)
for i in range(5):
time.sleep(1)
print("%s递过来两件货物"%name)
p.send("瓜子")
p2.send("花生")
transfer("bigberg")
#输出
Hi A, 货物来了,准备搬到仓库!
Hi B, 货物来了,准备搬到仓库!
bigberg将货物送来了!
bigberg递过来两件货物
货物[瓜子]已经被A搬进仓库了。
货物[花生]已经被B搬进仓库了。
bigberg递过来两件货物
货物[瓜子]已经被A搬进仓库了。
货物[花生]已经被B搬进仓库了。
bigberg递过来两件货物
货物[瓜子]已经被A搬进仓库了。
货物[花生]已经被B搬进仓库了。
bigberg递过来两件货物
货物[瓜子]已经被A搬进仓库了。
货物[花生]已经被B搬进仓库了。
bigberg递过来两件货物
货物[瓜子]已经被A搬进仓库了。
货物[花生]已经被B搬进仓库了。
以上这篇python 生成器协程运算实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# python
# 生成器
# 协程
# python 协程中的迭代器
# 生成器原理及应用实例详解
# python生成器/yield协程/gevent写简单的图片下载器功能示例
# 基于python生成器封装的协程类
# python学习之可迭代对象、迭代器、生成器
# python 生成器需注意的小问题
# 浅谈Python中的生成器和迭代器
# 详解Python生成器和基于生成器的协程
# 来了
# 搬到
# 两件
# 给大家
# 当我们
# 的是
# 是个
# 我们可以
# 只会
# 希望能
# 如果没有
# 会给
# 这篇
# 能给
# 转换成
# 才可
# 转换为
# 小编
# 说成
# 大家多多
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
Laravel如何使用Gate和Policy进行授权?(权限控制)
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
公司网站制作需要多少钱,找人做公司网站需要多少钱?
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
如何快速查询网站的真实建站时间?
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
中山网站制作网页,中山新生登记系统登记流程?
如何在阿里云购买域名并搭建网站?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
如何在阿里云香港服务器快速搭建网站?
Laravel Fortify是什么,和Jetstream有什么关系
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
实例解析Array和String方法
Laravel如何使用Collections进行数据处理?(实用方法示例)
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
如何在IIS中新建站点并解决端口绑定冲突?
Laravel如何实现API速率限制?(Rate Limiting教程)
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
Python自动化办公教程_ExcelWordPDF批量处理案例
如何在Windows虚拟主机上快速搭建网站?
智能起名网站制作软件有哪些,制作logo的软件?
Laravel观察者模式如何使用_Laravel Model Observer配置
Python图片处理进阶教程_Pillow滤镜与图像增强
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
javascript日期怎么处理_如何格式化输出
微信小程序 配置文件详细介绍
非常酷的网站设计制作软件,酷培ai教育官方网站?
创业网站制作流程,创业网站可靠吗?
jQuery validate插件功能与用法详解
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel怎么在Blade中安全地输出原始HTML内容
Laravel如何实现多对多模型关联?(Eloquent教程)
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
详解CentOS6.5 安装 MySQL5.1.71的方法
Python文件流缓冲机制_IO性能解析【教程】
网站建设整体流程解析,建站其实很容易!
新三国志曹操传主线渭水交兵攻略
怎么用AI帮你设计一套个性化的手机App图标?
Laravel如何升级到最新版本?(升级指南和步骤)

