zoukankan      html  css  js  c++  java
  • 迭代器与生成器

    迭代器含义:

    1.迭代器一定是可迭代对象,因为迭代器协议中声明,包含__iter__,__next__ 方法的才算迭代器;

    可迭代对象的协议是只要包含__iter__的都算是可迭代对象。

    2.迭代器对象不可直接打印

    生成器:

    def func():
        for i in range(10):
            yield i
            print('hello')
    f = func()    #存入变量生成的迭代器才有意义,因为迭代器不会关闭,可以持续迭代
    print(f.__next__())
    print(f.__next__())

     .send()的运用

    1.send()与 next一样的效果,但是多了一个传值的功能;只要yield前面有变量接着,传进去的值就会赋给变量。

    2.如果没有变量接着,也不会报错。所以以后就用send,抛弃next了

    注意:

    1.不能直接用send 调用迭代器。因为,迭代器执行开始时,是没有变量接着的,哪怕第一句就写yield 也不行,因为yield还没运行

     1 def init(func):  #在调用被装饰生成器函数的时候首先用next激活生成器
     2     def inner(*args,**kwargs):
     3         g = func(*args,**kwargs)
     4         next(g)
     5         return g
     6         print(g)
     7     return inner
     8 
     9 @init
    10 def averager():
    11     total = 0.0
    12     count = 0
    13     average = None
    14     while True:
    15         term = yield average
    16         total += term
    17         count += 1
    18         average = total/count
    19 
    20 g_avg = averager()
    21 print(g_avg.send(10))
    22 print(g_avg.send(30))
    23 print(g_avg.send(5))
  • 相关阅读:
    9、 docker容器数据卷
    第十八章 MySQL数据库优化
    第十七章 MySQL的VIP漂移和Atlas
    第十六章 MHA高可用(续)
    第一章 shell基础
    第十五章 MHA高可用
    第十四章 MySQL的各种主从
    第十三章 MySQL的主从复制
    第十二章 MySQL的恢复与备份
    第十一章 MySQL日志详解
  • 原文地址:https://www.cnblogs.com/yizimei/p/8179144.html
Copyright © 2011-2022 走看看