zoukankan      html  css  js  c++  java
  • 生成器典型例题

    # def demo():
    # for i in range(4):
    # yield i
    # g=demo()
    # g1=(i for i in g)
    # g2=(i for i in g1)
    # print(list(g2))
    # print(list(g1))

    def add(n,i):
    return n+i
    def test():
    for i in range(4):
    yield i
    g=test()
    for n in [1,10]:
    g=(add(n,i) for i in g)

    # # g=(add(n,i) for i in g)
    # n = 10
    # g=(add(n,i) for i in (add(n,i) for i in g))
    # print(list(g))

    # for i in [1,2]:
    # pass
    #
    # print(i)


    import os

    def init(func): #预激活生成器的一个装饰器
    def wrapper(*args,**kwargs):
    g=func(*args,**kwargs) #func是一个生成器函数,返回的g是一个生成器
    next(g) #预激活生成器
    return g #返回激活后的生成器g
    return wrapper

    @init #list_files = init(list_files) == wrapper
    def list_files(target): #target = opener_g
    while 1:
    dir_to_search=yield
    for top_dir,dir,files in os.walk(dir_to_search): #os.walk (路径,文件夹,文件)
    for file in files: #从文件列表中获取一个一个的文件
    target.send(os.path.join(top_dir,file)) #把文件的绝对路径传给了opener_g
    @init #opener = init(opener) == wrapper
    def opener(target): #target = cat_g
    while 1:
    file=yield #拿到了一个文件的路径
    fn=open(file,encoding='utf-8') #打开文件获取了一个文件句柄
    target.send((file,fn)) #cat_g发送了一个文件的路径和句柄
    @init #cat = init(cat) == wrapper
    def cat(target): #target = grep_g
    while 1:
    file,fn=yield #文件路径和文件的句柄
    for line in fn:
    target.send((file,line)) #文件路径,文件中的一行
    @init #grep = init(grep) == wrapper
    def grep(pattern,target): #要搜索的关键字,printer_g
    lst = []
    while 1:
    file,line=yield #文件的路径和每一行
    if pattern in line and file not in lst: #判断关键字是否在当前行
    lst.append(file)
    target.send(file) #printer_g.send文件路径
    @init #printer = init(printer) == wrapper
    def printer():
    while 1:
    file=yield #获取一个文件路径
    if file:
    print(file) #打印文件的路径:文件里包含了要搜索的关键字

    g=list_files(opener(cat(grep('python',printer()))))
    # g=list_files(opener(cat(grep('python',printer_g))))
    # g=list_files(opener(cat(grep_g)))
    # g=list_files(opener(catg)))
    # g=list_files(opener_g)
    g.send('D:Python代码文件存放目录S6day18')

    #用户给一个路径和关键字
    #可以从一个文件路径中找到所有包含关键字的文件

  • 相关阅读:
    程序员的自我修养
    c++中的const 限定修饰符
    基于.net开发平台项目案例集锦
    中国期货公司排行及相关上市公司
    备份一些好的书籍名字
    商业银行房贷业务节后骤然下降
    散户炒股七大绝招 巨额获利风险小 (网摘)
    上海2月住宅供应剧减七成 房企捂盘保价
    2009年中国各省人均GDP排名(鄂尔多斯人均GDP将很有可能超过两万美元,全国第一)
    (载自MSN )个人炒汇多年来的一些心得
  • 原文地址:https://www.cnblogs.com/kxllong/p/7302406.html
Copyright © 2011-2022 走看看