码迷,mamicode.com
首页 > 其他好文 > 详细

生成器的运用

时间:2017-06-16 16:37:35      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:com   import   方法   return   一段   定义   技术   lines   分享   

定义:

函数体内包含有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

生成器的运用

标签:com   import   方法   return   一段   定义   技术   lines   分享   

原文地址:http://www.cnblogs.com/935415150wang/p/7027563.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!