• day 14


    相关练习

    1、处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕

    #比较 low 的方法
    def check_file(filename,aim):
        with open(filename,encoding='utf-8') as f: #句柄 : handler,文件操作符,文件句柄
            for line in f:
                if aim in line:
                    print(line.strip())
    check_file('E:/py/log/log.txt','add')
    
    
    #生成器实现
    def check_file(filename,aim):
        with open(filename,encoding='utf-8') as f: #句柄 : handler,文件操作符,文件句柄
            for line in f:
                if aim in line:
                    yield line
    g = check_file('E:/py/log/log.txt','add')
    for i in g:
        print(i.strip())

    2、写生成器,从文件中读取内容,在每一次读取到的内容之前加上 ‘ *** ’ 之后再返回给用户

    def check_file(filename):
        with open(filename,encoding='utf-8')as f:
            for i in f:
                yield '***'+i.strip()
    #g = check_file("E:/py/log/log.txt")
    #for i in g:
    #    print(i)
    
    #也可以这样写
    for i in check_file("E:/py/log/log.txt"):
        print(i)

     加上行号

    def dir(url):
        with open(url,encoding='utf-8')as f:
            for index,i in enumerate(f,1):
                yield "*%s* "%index + i.strip()
                
    d = dir('E:/py/log/log.txt')
    for i in d:
        print(i)

    面试题

    生成器相关的面试题

    for 循环套生成器表达式的题,就把 for 循环拆开

    题一:阅读下面代码,print 打印的结果是什么?

    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(g)) #list() 字符串强转
    print(list(g1))  #[0, 1, 2, 3]
    print(list(g2))  #[]
    
    #为什么 list(g2) 中会是空呢?
    #因为:g1 里面的值已经悉数给到 list() 当 g2 在找 g1 要值时,g1 已经没值了 所以 g2 返回为空

    题二:阅读下面代码,print 打印的结果是什么?

    def add(n,i):
        return n+i
    
    def test():
        for i in range(4):
            yield i
    
    g=test()
    for n in [1,10,5]:
         g=(add(n,i) for i in g)
    
    print(list(g))  #[15,16,17,18]
    
    """
    #把以上的 for 循环拆开 在 g 这个未知数换成已知的
    ###很重要的一点 当 n=1,n=10 的时候,程序并没有执行,只是做了赋值的工作,就过去了
    ###那程序是什么时候开始取值的呢?在 list(g) 的时候才执行,这是时候的 n 就是最后一个 n 了
    ###前面的 n 已经消失了
    
    n = 1
    g=(add(n,i) for i in g)     #g=test()
    n = 10
    g=(add(n,i) for i in g)     #g=(add(n,i) for i in test()))
    n = 5
    g=(add(n,i) for i in g)     #g=(add(n,i) for i in (add(n,i) for i in test())))
    
    
    #组合起来就是
    n = 1
    g=(add(n,i) for i in test())
    n = 10
    g=(add(n,i) for i in (add(n,i) for i in test()))
    n = 5
    g=(add(n,i) for i in add(n,i) for i in (add(n,i) for i in test()))
    
    #结果为:g=[15,16,17,18]
    """
  • 相关阅读:
    Step by step Dynamics CRM 2013安装
    SQL Server 2012 Managed Service Account
    Step by step SQL Server 2012的安装
    Step by step 活动目录中添加一个子域
    Step by step 如何创建一个新森林
    向活动目录中添加一个子域
    活动目录的信任关系
    RAID 概述
    DNS 正向查找与反向查找
    Microsoft Dynamics CRM 2013 and 2011 Update Rollups and Service Packs
  • 原文地址:https://www.cnblogs.com/ysging/p/10094087.html
Copyright © 2020-2023  润新知