码迷,mamicode.com
首页 > 其他好文 > 详细

生成器进阶

时间:2018-12-01 15:32:59      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:参数   class   调用   alt   结果   inf   位置   code   avg   

 def generator():
#     print(123)
#     content = yield 1
#     print(‘=======‘,content)
#     print(456)
#     arg = yield 2
#     ‘‘‘‘‘‘
#     yield
# g1 = generator()
# g2 = generator()
# g1.__next__()
# g2.__next__()
# print(‘***‘,generator().__next__())
# print(‘***‘,generator().__next__())

# g = generator()
# ret = g.__next__()
# print(‘***‘,ret)
# ret = g.send(‘hello‘)   #send的效果和next一样
# print(‘***‘,ret)

send 获取下一个值的效果和next基本一致
#只是在获取下一个值的时候,给上一yield的位置传递一个数据
#使用send的注意事项
# 第一次使用生成器的时候 是用next获取下一个值
# 最后一个yield不能接受外部的值

 

生成式实例获取移动平均值

# 获取移动平均值         计算第一排数据的平均值
# 10 20 30 10
# 10 15 20 17.5
# avg = sum/count
# def average():
#     sum = 0
#     count = 0
#     avg = 0
#     while True:
#         num = yield avg       #先调用avg_g.__next__返回 avg 再此调用avg.send(int)向yield位置传入新的值,同时将此值作为参数参与运算,并返回一个新的运算结果。
#         sum += num    # 10
#         count += 1    # 1
#         avg = sum/count
#
# avg_g = average()
# avg_g.__next__()
# avg1 = avg_g.send(10)
# avg1 = avg_g.send(20)
# print(avg1)

再此基础上加入一个装饰器,省去了调用avg._g.__next__这一步

技术分享图片

 

生成器进阶

标签:参数   class   调用   alt   结果   inf   位置   code   avg   

原文地址:https://www.cnblogs.com/daju/p/10048833.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!