• 生成器函数进阶


     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
  • 相关阅读:
    jsp-servlet(2)响应HTML文档-书籍管理系统
    jsp-servlet(1)环境搭建(Tomcat和myeclipse)和基本概念
    MySQL(2)数据库 表的查询操作
    MySQL(1) 基本操作(MySQL的启动,表的创建,查询表的结构和表的字段的修改)
    Java 构造器Constructor 继承
    数据结构:链表的操作
    C++指针易错点梳理
    C++操作符重载
    无重复字符的最长子串-LeetCode-第3题-C++
    计算几何模板存储
  • 原文地址:https://www.cnblogs.com/Intermittent-psychosis/p/10591038.html
Copyright © 2020-2023  润新知