• python_yield生成器


    1、先对比range 和 xrange 的区别

      >>> print range(10)

      [0123456789]

      >>> print xrange(10)

      xrange(10)

    如上代码所示,range会在内存中创建所有指定的数字,而xrange不会立即创建,只有在迭代循环时,才去创建每个数组。

    自定义生成器: 

    def func(arg):
    seed = 0
    while True:
    seed = seed +1
    if seed > arg:
    return
    else:
    yield seed

    for i in func(10):
    print i

    结果:1、2、3、4、5、6、7、8、9、10

    每到yield执行完,它会返回seed值,然后暂停执行,当再次循环调用它会从上次的暂停点再次执行至下次暂停或函数操作完成!


    2、文件操作的 read 和 xreadlinex 的的区别

    read会读取所有内容到内存
      xreadlines则只有在循环迭代时才获取
     
    基于next自定义生成器NReadlines:
    def NReadlines():
        with open('log','r') as f:
            while True:
                line = f.next()
                if line:
                    yield line
                else:
                    return
    
    for i in NReadlines():
        print i
    
    基于next自定义生成器NReadlines
    View Code
    基于seek和tell自定义生成器NReadlines:
    def NReadlines():
        with open('log','r') as f:
            seek = 0
            while True:
                f.seek(seek)
                data = f.readline()
                if data:
                    seek = f.tell()
                    yield data
                else:
                    return
    
    for item in NReadlines():
        print item
    
    基于seek和tell自定义生成器NReadlines
    View Code
     
     
     



  • 相关阅读:
    Ubuntu上VNC 配置
    Ubuntu远程桌面xrdp方法
    sudo 免密码
    Ubuntu 12.04 root默认密码? 如何使用root登录?
    DNS 和 IPv6 配置攻略
    计算机专业学习浅谈
    [图像]张正友论文翻译(2)
    [图像]张正友论文翻译(1)
    [图像]用Matlab在图像上画矩形框
    word如何修改尾注
  • 原文地址:https://www.cnblogs.com/fengzaoye/p/5740857.html
Copyright © 2020-2023  润新知