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

    一、导入
    1,dir功能
    print(dir([]))告诉我这个列表拥有的所有方法
     带着双下划线的方法叫做双下方法。
    2,一个列表执行了_iter_()之后的返回值就是一个迭代器
    3,_length_hint_元素个数
    4,_setstate_从指定位置取值
    5,[]._iter_()迭代器---->_next_通过next就可以从迭代器中一个一个的取值
    6、迭代器中的_next_()方法 可以一个一个的获取值
    二、迭代器概念
    迭代器协议:内部含有_next_和 _iter_方法的就是迭代器
    三、可迭代的
    可迭代协议 :只要含有 _iter_方法的都是可迭代的(都能被for循环)
    四、可迭代的—>迭代器
    可迭代的+._iter_()方法就可以得到一个迭代器
    五、for循环与迭代器
    for循环就是在使用迭代器
    只有是可迭代对象的时候 才能用for
    当我们遇到一个新的变量,不确定能不能for循环的时候,就判断它是否可迭代。
    六、迭代器的好处:
    #从容器类型中一个一个的取值,会把所有的值都取到
    #可以节省内存空间
        #迭代器并不会在内存中再占用一个大块内存,而是随着循环每次生成一个,每次next每次给我一个
    七、生成器
    1,生成器的本质是迭代器
    2,生成器函数
    def generator():
        print('1')
        yield 'a'
    ret =generator ()
    print(ret)

    只要含有yield的关键字函数都是生成器函数,且yield与return不能共用且需要写在函数内部

    #只要是生成器函数:执行之后会得到一个生成器作为返回值。

    def generator():
        print(1)    
        yield 'a'
    #生成器函数:执行之后会得到一个生成器作为返回值
    ret = generator()
    print(ret)
    print(ret._next_())
    def wahaha():
        for i in range(20000):
            yield    '娃哈哈%s'%i

    3,监听文件的输入

    def tail(filename):

      f =open('file',encoding ='utf-8')
      while True:
          line = f.readline()
        if line.strip():
          yield line.strip()
    g = tail ('file')
    for i in g:
      if 'python' in i :
        print(i)
  • 相关阅读:
    jquery-4 完整表单验证实例
    从程序员的角度分析微信小程序(编程语言:用到什么学什么)
    微信程序开发
    css3-4 css3边框样式
    css3-3 css3背景样式
    boxfilter 实现
    opencv在arm和x86在移植
    PAT 1033. To Fill or Not to Fill (贪婪)
    [git] fatal: This operation must be run in a work tree
    spring与mybatis集成和事务控制
  • 原文地址:https://www.cnblogs.com/kakawith/p/8178596.html
Copyright © 2011-2022 走看看