• 生成器典型例题


    # 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')

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

  • 相关阅读:
    NPOI创建Excel﹑合并单元格﹑设置单元格样式﹑边框
    MQTT 折腾笔记协议简读
    深度剖析Byteart Retail案例:仓储(Repository)及其上下文(Repository Context)
    MySQL简介,安装,简单使用
    技术改进方案模板
    【零基础学习iOS开发】【01开篇】
    DDD:主键映射,你一直在使用的企业应用模式
    自己写框架 实践 (Event Framework)
    无刷新页面
    Parallel Desktop,Mac OS X虚拟Win7
  • 原文地址:https://www.cnblogs.com/kxllong/p/7302406.html
Copyright © 2020-2023  润新知