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

    1  迭代器的概念

    print(dir([]))   # 告诉我列表的所有用法

    #有双下划线的所有方法叫做双下方法,是C语言已经写好的方法。你可以用不止一种方法调用它。

    #列表的用法变集合   set (dir([]))

    #求交集    set(dir([]))&set(dir({}))&set(dir(''))  求列表,字典,字符串它们的用法的交集(他们共同的用法)

    # iterable  adj  可迭代的     iterater  迭代器

    # print('__iter__' in dir(set))      结果是 True    就是可迭代的

    1,只要能被for循环的数据类型就一定拥有__iter__(可迭代的)方法

    2,一个列表执行了__iter__()之后的循环值就是一个迭代器

    3,[]__iter__()  迭代器

    4,__next__  通过next就可以从迭代其中一个一个取值。

    5,只要含有__iter__()方法都是可迭代的——可迭代协议

    6,内部含有__next__()和__iter__()方法就是迭代器——迭代器协议

    #print(isinstance([],intable))  判断[]列表是不是intable
    1,迭代器一定是可迭代的,但可迭代的不一定是迭代器
    2,可迭代的.__iter__()方法就可以得到一个迭代器
    3,迭代器中的__next__()方法可以一个一个的获取值
    4,for循环实际就是在使用迭代器
     
    # iterator  可迭代对象

    #直接给你内存地址,需要自己判断是不是迭代器

    #for

    1,只有是可迭代的对象的时候,才能用for

    2,当我们遇到一个新的变量,不确定能不能用for循环的时候,就判断它是否可迭代,看他内部有没有__iter__()方法

    #迭代器的好处

    1,方便,从容器类型中一个一个的取值,会把所有的值都取到

    2,节省内存空间。

         并没有生成数据,而是现实有这些东西。

         迭代器并不会在内存中在占2一大块内存,而是随着循环,么次生成一个。每次next,每次给一个

    2 生成器

    #生成器——本质是迭代器,自己写的。

    #生成器函数——本质上就是我们写的函数。

     def generator():
      print(i)
      # return 'a'   #yield与return不共用,yield只能在函数内部
      ⑦yield 'a'       #只要含有yiled关键字的函数都是生成器函数ret =generator()
    print(ret)
    print(ret.__next__())

    #生成器函数:执行之后会得到一个生成器作为返回值(不执行函数,直接返回生成器)直到⑤是才触发函数。

    def wahaha():
        for i in range(2000000):
            yield '哇哈哈%s' %i
    g = wahaha()
    for i in g :
        print(i)

    监听文件

    原始版本
    def
    tail(filename): f = open(filename,encoding = 'utf-8') while 1 : line = f.reading() if line.strip(): print(line.strip()) tail('file')
    #注意替换,这个替换上面的
    def tail(filename):
    f = open(filename,encoding = 'utf-8')
    while 1 :
    line = f.reading()
    if line.strip():
    yield line.strip()
    g = tail('file')
    for i in g :
    print(i)
    
    
    监听过滤
    def tail(filename):
    f = open(filename,encoding = 'utf-8')
    while 1 :
    line = f.reading()
    if line.strip():
    yield line.strip()
    g = tail('file')
    for i in g :
    if 'python' in i:
    print(i)
    
    
  • 相关阅读:
    线程原理 创建方式
    Chapter17 【异常、线程】
    驱动
    java中Super到底是什么意思
    Java 8后的首个长期支持版本Java 11
    OpenJDK和JDK区别
    异常
    模拟斗地主洗牌发牌
    Debug追踪
    Python 垃圾回收机制详细
  • 原文地址:https://www.cnblogs.com/aaronthon/p/8178646.html
Copyright © 2011-2022 走看看