• 可迭代对象 迭代器 生成器 推导式 匿名函数


    可迭代对象与迭代器

    可迭代对象

    1.可以进行循环更新的一个实实在在值。
    #2.如何判断一个对象是否是可迭代对象: 利用内置函数:dir()可以查看对象内部方法
    3.有__iter__方法的对象,都是可迭代对象。
    4.str,list set tup 逗是可迭代对象
    	print('__iter__' in dir(str))#True
    	
    
    
    ps dir()函数可以获取对象所有方法
    

    迭代器

    1.可更新迭代的工具
    2.在python中,内部含有'__iter__'方法并且含有'__next__'方法的对象就是迭代器。
    3.迭代器可以迭代取值。利用next()进行取值(节省内存)或者转为list 元祖等等取值
    4.一个next()取一个值 且会记录位置 迭代器一条路走到底,不走回头路。
    5.取完了再next()会报错(StopIteration) 我们可以用try处理 万能异常(Exception)
    

    可迭代对象转化成迭代器

    利用内置函数iter()
    l1=[1,2,3]
    obj = iter(l1)
    object.__iter__()
    

    for循环原理与模拟

    原理
    	内部将可迭代对象转为迭代器了
    	
    while模拟for循环
    s = 'gkffdsa;lfkdsk;lafkds;laldgjfd'
    obj = iter(s)
    while 1:
        try:
            print(next(obj))
        except StopIteration:
            break
    

    可迭代对象与迭代器的对比

    • 可迭代对象是一个操作方法比较多,比较直观,存储数据相对少(几百万个对象,8G内存是可以承受的)的一个数据集。
    • 当你侧重于对于数据可以灵活处理,并且内存空间足够,将数据集设置为可迭代对象是明确的选择。
    • 是一个非常节省内存,可以记录取值位置,可以直接通过循环+next方法取值,但是不直观,操作方法比较单一的数据集。
    • 当你的数据量过大,大到足以撑爆你的内存或者你以节省内存为首选因素时,将数据集设置为迭代器是一个不错的选择。

    生成器

    1.将return换为yield就是生成器函数
    2.只要函数中出现了yield那么他就不是函数,它是生成器函数。
    3.不结束函数,对应着给 next 返回值(多个值通过元组的形式返回)。 会记录位置
    

    举例

    def func():
        yield 2,4,5
        print(11)
        yield 3
        print(22)
        yield 4
        yield 5
    ret = func()  # 生成器对象
    print(ret)#生成器对象
    print(next(ret))#返回(2, 4, 5) 到了yield就停止后面的11不打印
    print(next(ret))#返回3 第2次才打印11 到了yield就停止 后面的22 不打印
    
    总结
    	yield : 对应next给next返回值
        到了yield就停止后面的不打印
    

    yield from

    1.yield from 将一个可迭代对象的每一个元素返回给next
    2.yield from 节省代码,提升效率(代替了for循环)
    

    举例

    def func():
        l1 = [1, 2, 3]
        yield from l1#就是下面的简写
        '''
        yield 1
        yield 2
        yield 3
        '''
    ret = func()
    print(next(ret))
    

    出错题

    def eat_baozi_gen():
        for i in range(1,5):
            yield f'{i}号包子'
            print(11)
    ret1 = eat_baozi_gen()
    for i in ret1:
        print(i)
    

    推导式

    列表推导式

    创建方式

    1.循环模式: [变量(加工后的变量) for 变量 in iterable]
    print([i**2 for i in range(1, 11)])
    2.筛选模式: [变量(加工后的变量) for 变量 in iterable if 条件]
    print([i**2 for i in range(1, 11)])
    

    列表推导式的优缺点

    优点:
        1, 简单,快捷,装b。
    缺点:
        2. 可读性不高,不好排错。
    	慎用,不要入迷。
    

    生成器推导式

    生成器表达式: 小括号
    与列表推导式几乎一模一样。
    循环模式,筛选模式。
    obj = (i for i in range(1, 11))
    

    字典推导式

    字典推导式,集合推导式:  两种模式: 循环模式,筛选模式
    l1 = ['小潘', '怼怼哥','西门大官人', '小泽ml亚']
    dic = {}#{0: '小潘', 1: '怼怼哥', 2: '西门大官人'}
    for index in range(len(l1)):
        dic[index] = l1[index]
    print(dic)
    
    
    使用了字典推导式
    print({i:l1[i] for i in range(len(l1))})
    

    匿名函数

    一句话函数 一般与内战函数结合

    1.没有名字的函数,一句话函数。
    2.匿名函数只能构建简单的函数,
    3.一般与内置函数一起使用
    

    举例

    func2 = lambda 形参: 返回值
    func2 = lambda x,y: x + y
    
  • 相关阅读:
    双写一致性的讨论
    webstorm设置新建vue文件的模板
    java基础类及方法
    中国大学零基础学Java语言练习题
    java基础继承
    java基础接口、继承、多态
    Windows、Mac 命令行启动程序(为了查看Electron打包后主进程日志)
    【Typescirpt】定义数字范围类型
    MRP
    Raid 学习
  • 原文地址:https://www.cnblogs.com/saoqiang/p/12386192.html
Copyright © 2020-2023  润新知