zoukankan      html  css  js  c++  java
  • 24 生成器和迭代器复习和作业

    # 迭代器和生成器
    # 迭代器
    # 可迭代协议 —— 含有iter方法的都是可迭代的
    # 迭代器协议 —— 含有next和iter的都是迭代器
    # 特点
    # 节省内存空间
    # 方便逐个取值,一个迭代器只能取一次。
    # 生成器 —— 迭代器
    # 生成器函数
    # 含有yield关键字的函数都是生成器函数
    # 生成器函数的特点
    #调用之后函数内的代码不执行,返回生成器
    #每从生成器中取一个值就会执行一段代码,遇见yield就停止。
    #如何从生成器中取值:
    # for :如果没有break会一直取直到取完
    # next :每次只取一个
    # send :不能用在第一个,取下一个值的时候给上个位置传一个新的值
    # 数据类型强制转换 :会一次性把所有数据都读到内存里


    # 生成器表达式
    # (条件成立想放在生成器中的值 for i in 可迭代的 if 条件

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

    def check_file(filename,aim):
        with open(filename,encoding='utf-8') as f:   #句柄 : handler,文件操作符,文件句柄
            for i in f:
                if aim in i:
                    yield i
    
    g = check_file('1.复习.py','生成器')
    for i in g:
        print(i.strip())
    #写生成器,从文件中读取内容,在每一次读取到的内容之前加上‘***’之后再返回给用户。
    def check_file(filename):
        with open(filename,encoding='utf-8') as f:   #句柄 : handler,文件操作符,文件句柄
            for i in f:
                yield '***'+i
    
    for i in check_file('1.复习.py'):
        print(i.strip())

     #面试题

    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))
    print(list(g1))
    print(list(g2))
    # [0, 1, 2, 3]
    # []
    # []
    
    #第二种情况
    #print(list(g))
    print(list(g1))
    print(list(g2))
    # [0, 1, 2, 3]
    # # []
    
    #第三种情况
    #print(list(g))
    #print(list(g1))
    print(list(g2))
    #[0, 1, 2, 3]
    #第二题
    def add(n,i):
        return n+i
    
    def test():
        for i in range(4):
            yield i
    
    g=test()
    for n in [1,10,5]:              #For 循环套生成器表达式
        g=(add(n,i) for i in g)
    # 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=(15,16,17,18)
    
    print(list(g))      #[15, 16, 17, 18]
  • 相关阅读:
    利用ArcToolBox ModelBuider进行数据处理
    【转】C#中通过API调用获取文件图标
    【转】利用C#实现标注式消息提示窗口
    【转】在C#2005中创建快捷方式
    爱一个人好难
    【转】C#获取文件与文件夹默认图标
    【转】远程教育理论中几个基本概念的探讨2
    【转】C#中Bitmap类实现对图像操作的一些方法
    【转】C#启动外部程序
    WshShortcut 对象说明
  • 原文地址:https://www.cnblogs.com/bydzxzy/p/9657621.html
Copyright © 2011-2022 走看看