zoukankan      html  css  js  c++  java
  • 生成器的运用

    定义:

    函数体内包含有yield关键字,该函数执行的结果是生成器

    一个标准,generator代表类型是迭代

    yield和return相似但是一个函数内可以有多个yield而函数中出现了多个return也只会对第一个return有效果

    yield的功能:

    1. 与return类似,都可以返回值,不一样在于,yield可以使用多个,return到了就停止

    2.为封装好的的函数能够使用__iter__和__next__方法,

    3.遵循迭代器的取值方式obj.__next__(),触发函数的执行和函数的保存都是通过yeild保存的

    几个用法

    tail -f a.txt | grup  'error'

    我们再做一个类似的 内容

    tail -f a.txt | grup  'error'| grep '404'

    这个内容的代码

    import time
    def tail(file,encodin='utf-8'):
        with open(file,encoding=encodin) as f:
            f.seek(0,2)
            while True:
                line=f.readline()
                if line:
                    yield line
                else:
                    time.sleep(0.5)
    def grep(lines,pattern):
        for line in lines :
            if pattern in line:
                yield line
    g=tail('a.txt')
    
    g1=grep(g,'hehehe')
    
    g2=grep(g1,'404')
    
    for i in g2:
        print(i)

    这一段代码其实就是grep代码中的yield line 是由 print line

  • 相关阅读:
    4. Object
    3. string
    8. 滚动条美化
    7. 单位,移动布局
    2. js的异步
    2. 即时通讯
    让PHP更快的提供文件下载
    phpstorm+xdebug远程调试设置
    postman自动生成签名
    一位技术人员成长历程
  • 原文地址:https://www.cnblogs.com/935415150wang/p/7027563.html
Copyright © 2011-2022 走看看