python 生成器中的send、移动平均值、列表表达式相关
1.send
def generato():
print('关于send的使用方法')
tmp = yield 1
print('上面的就是send的应用')
print(tmp)
yield '现在来测试一下效果吧'
g = generato()
g.__next__()
g.send('我们一起学python')
#send 获取下一个值的效果和next基本一致
#只是在获取下一个值的时候,给上一yield的位置传递一个数据
#使用send的注意事项
# 第一次使用生成器的时候 是用next获取下一个值
# 最后一个yield不能接受外部的值
2.生成器计算移动平均值
def averager():
total = 0.0
count = 0
average = None
while True:
term = yield average
total += term
count += 1
average = total/count
g_avg = averager()
print(g_avg.__next__())
print(g_avg.send(10))
print(g_avg.send(30))
升级版
def init(func):
def inner(*args,**kwargs):
g = func(*args, **kwargs)
g.__next__()
return g
return inner
@init
def averager():
total = 0
count = 0
average = None
while True:
term = yield average
total += term
count += 1
average = total/count
g_avg = averager()
print(g_avg.send(10))
print(g_avg.send(30))
生成器列表嵌套习题:
def add(n,i):
return n+i
def test():
for i in range(4):
yield i
g = test()
for n in [1,10,5]:
g = (add(n,i) for i in g)
print(list(g))
PS:遇到问题没人解答?需要Python学习资料?可以加点击下方链接自行获取
note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee34324d76
生成器的列表嵌套式一定要拆分写!!注意只有在yield额时候生成数据,在for循环中
生成过两次g,不可以按照顺序执行下去,因为n=10时候的g是不可以赋值给n=5时候的g的,
所以一定要拆分开来计算!
def add(n,i):
return n+i
def test():
for i in range(4):
yield i
g = test()
for n in [1,10,5]:
g = (add(5,i) for i in add(5,i) for i in add(5,i) for i in [0,1,2,3]) #按照解析的计算即可
print(list(g))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人