python 移动平均函数_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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值