zoukankan      html  css  js  c++  java
  • 生成器函数进阶

     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
             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)

    预激生成器的装饰器
     def init(func):   #装饰器
         def inner(*args,**kwargs):
             g = func(*args,**kwargs)    #g = average()
             g.__next__()
             return g
         return inner

     @init
     def average():
         sum = 0
         count = 0
         avg = 0
         while True:
             num = yield avg
             sum += num     #10
             count += 1     #1
             avg = sum/count

     avg_g = average()   #===> inner
     ret = avg_g.send(10)
     print(ret)
     ret = avg_g.send(20)
     print(ret)

    python 3
     def generator():
         a = 'abcde'
         b = '12345'
         for i in a:
             yield i
         for i in b:
             yield i
     def generator():
         a = 'abcde'
         b = '12345'
         yield from a
         yield from b

     g = generator()
     for i in g:
         print(i)

     send
         send的作用范围和next一模一样
         第一次不能用send
         函数中的最后一个yield不能接受新的值

     计算移动平均值的例子
     预激生成器的装饰器的例子
     yield from






    作者:间歇性-精神病 出处:https://www.cnblogs.com/Intermittent-psychosis/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意请保留此段声明,请在文章页面明显位置给出原文连接 Github:https://github.com/don15278/python.git
  • 相关阅读:
    创建可管理的对象属性
    解析简单xml文档
    定义类的__slots__属性节省内存的开销
    读写json数据
    读写csv,excel文件数据
    常用的字符串处理方法
    sql中case when 的使用
    对字典的处理
    元组的元素命名
    列表,字典,集合按条件筛选
  • 原文地址:https://www.cnblogs.com/Intermittent-psychosis/p/10591038.html
Copyright © 2011-2022 走看看