zoukankan      html  css  js  c++  java
  • 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
     
     
     



  • 相关阅读:
    JavaScript获取查询字符串
    Struts2 验证码图片实例
    js函数重载
    js面向对象基础
    js上下文
    java克隆入门和深入
    js类型检查
    js闭包
    Phonegap移动开发:布局总结(一) 全局
    Python发送多附件邮件的方法
  • 原文地址:https://www.cnblogs.com/fengzaoye/p/5740857.html
Copyright © 2011-2022 走看看