• 10-4 生成器


    生成器的本质就是迭代器

    生成器函数
    只要含有yeild关键字的函数都是生成器函数,且与return不能共用,且需要写在函数内部
    每次调用函数之后函数不执行,返回一个生成器
    每次调用next方法就会取到一个值
    直到取完最后一个,在执行next将会报错

    生成器函数的表现形式

      生成器---自己写的函数

     生成器表达式
    从生成器取值的几个方法:
    1.next
    2.for循环
    3.数据类型的强制转换(占用内存)
    def fun():
        for i in range(20):
        yield "娃哈哈%s"%i
    g = fun()
    print(list(g))

    结果:['娃哈哈0', '娃哈哈1', '娃哈哈2', '娃哈哈3', '娃哈哈4', '娃哈哈5', '娃哈哈6']

    简单的生成器函数

      只要包括__next__()函数和_iter__()的就是生成器

    def genetator():
        print(1)
        return 'a'
    ret = genetator()
    print(ret)
    
    结果:
    1
    a
    
    只要含有yeild关键字的函数都是生成器函数,且与return不能共用,且需要写在函数内部
    def genetator():
        print(1)
        yield 'a'
    # 生成器函数:执行之后会得到一个生成作为返回值
    ret = genetator()
    print(ret)#结果:<generator object genetator at 0x0225DCC0>
    print(ret.__next__())
    # 结果:
    # 1
    # a
    ret.__iter__()
    
    def wahaha():
        for i in range(20):
            yield '娃哈哈%s'%i
    g=wahaha()
    #只拿前五个,用count计数
    count = 0
    for k in g:
        count += 1
        print(k)
        if count > 5:
            break
    
    #随时可以再拿下一个值
    print('ooooo',g.__next__())
    
    每生成一个生成器,都互不相关,各个执行

     

    监听文件输入的例子(生成器)

    # 监听文件的输入
    def tail(filename):
        f = open(filename,encoding='utf-8')
        while True:
            line = f.readline()
            if line.strip():
                print('***',line.strip())
    tail('info')
    
    #监听文件的输入,并对内容进行过滤
    def tail(filename):
        f = open(filename,encoding='utf-8')
        while True:
            line = f.readline()
            if line.strip():
                yield line.strip()
    g = tail('info')
    for i in g:
        if 'python' in i:
            print('******',i,'~~~~')
        if 'www' in i:
            print('******',i,'!!!!')
    

      

  • 相关阅读:
    fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
    cvWaitKey 如果 cvNamedWindow就不会起作用
    Java 并发基础
    简化Getter 与 Setter 的插件 Lombok
    20、状态模式
    mybatis-generator 覆盖新增XML
    Jvm 虚拟机
    18、备忘录设计模式
    16、 观察者设计模式
    08、仲载者 -中间者模式
  • 原文地址:https://www.cnblogs.com/Cheryol/p/9742552.html
Copyright © 2020-2023  润新知