zoukankan      html  css  js  c++  java
  • 迭代器,生成器and文件监听

    迭代器

    #只要是能被for循环的数据类型  就一定拥有__inter__方法

      print([].__iter__())

    一个列表执行了__iter__()之后的返回值就是一个迭代器

    # Iterable 可迭代的 -- > __iter__ #只要含有__iter__方法的都是可迭代的
    # [].__iter__() 迭代器 -- > __next__ #通过next就可以从迭代器中一个一个的取值

    # 只要含有__iter__方法的都是可迭代的 —— 可迭代协议

    # 迭代器的概念
    # 迭代器协议 —— 内部含有__next__和__iter__方法的就是迭代器

    # 迭代器协议和可迭代协议
    # 可以被for循环的都是可迭代的
    # 可迭代的内部都有__iter__方法
    # 只要是迭代器 一定可迭代
    # 可迭代的.__iter__()方法就可以得到一个迭代器
    # 迭代器中的__next__()方法可以一个一个的获取值

    # for循环其实就是在使用迭代器
    # iterator
    # 可迭代对象
    # 直接给你内存地址
    # print([].__iter__())
    # print(range(10))

    #for
    #只有 是可迭代对象的时候 才能用for
    #当我们遇到一个新的变量,不确定能不能for循环的时候,就判断它是否可迭代

    # for i in l:
    # pass
    #iterator = l.__iter__()
    #iterator.__next__()

    #迭代器的好处:
    # 从容器类型中一个一个的取值,会把所有的值都取到。
    # 节省内存空间
    #迭代器并不会在内存中再占用一大块内存,
    # 而是随着循环 每次生成一个
    # 每次next每次给我一个

    生成器

    生成器函数--------本质上就是我们自己写得函数

    #生成器函数
    # def generator():
    # print(1)
    # return 'a'
    #
    # ret = generator()
    # print(ret)

    #只要含有yield关键字的函数都是生成器函数
    # yield不能和return共用且需要写在函数内
    # def generator():
    # print(1)
    # yield 'a'
    # #生成器函数 : 执行之后会得到一个生成器作为返回值

    文件监听

     1 def tail(filename):
     2 #     f = open(filename,encoding='utf-8')
     3 #     while True:
     4 #         line = f.readline()
     5 #         if line.strip():
     6 #             yield line.strip()
     7 # 
     8 # g = tail('file')
     9 # for i in g:
    10 #     if 'python' in i:
    11 #         print('***',i)

    心里有点乱。。。先这样吧。

  • 相关阅读:
    Solaris下批量kill掉oracle的session
    我写blog的方式变迁
    filezilla ftp client在win7 下获取ftp目录信息出错解决方法
    GNU System Monitor编译问题
    在vmware的Solaris虚拟机中安装vmtool
    关于golden gate director client的一点点使用总结
    测试 乱弹
    ORM的世界 (再补充)
    Yahoo Konfabulator
    轻量容器和注射依赖 的自实现
  • 原文地址:https://www.cnblogs.com/qinghuani/p/8179839.html
Copyright © 2011-2022 走看看