• Python3 函数进阶2


    迭代器

    • 迭代器是访问容器类数据类型元素的一种方式

    • 迭代器是一个可以记住遍历的位置的对象

    • 迭代器对象从容器类数据类型的第一个元素开始访问, 直到所有元素被访问完后结束

    • 迭代器只能往前不会后退

    可迭代对象

    • Python内置的str/list/tuple/dict/set/file/都是可迭代对象
    • 拥有__iter__内置方法的都是可迭代对象

    迭代器对象

    • 可迭代对象使用__iter__方法可以得到迭代器对象

    • 拥有__iter____next__内置方法的就是迭代器对象

    lis = [1, 2, 3]
    
    # 可迭代对象使用__iter__方法可以得到迭代器对象
    iter_lis = lis.__iter__()
    
    print(iter_lis.__next__())  # 1
    print(iter_lis.__next__())  # 2
    print(iter_lis.__next__())  # 3
    print(iter_lis.__next__())  # StopIteration
    

    总结和补充

    • 执行可迭代对象的__iter__方法, 拿到的返回值就是迭代器对象

    • 执行迭代器对象__next__方法, 拿到迭代器对象中的一个值

    • 执行迭代器对象__iter__方法, 拿到的是迭代器本身

    • 文件本身就是迭代器对象

      三元表达式

    三元表达式就是对if...else...语句的简化写法(不建议使用)

    x = 10
    y = 20
    
    # 普通写法
    if x > y:
        print(x)
    else:
        print(y)
        
           
    # 三元表达式
    print(x) if x > y else print(y)
    
    

    列表推导式

    列表推导式可以用来生成新的列表

    lis = [i for i in range(10)]
    print(lis)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    # 我们还可以对i进行数学运算
    lis = [i+1 for i in [1, 2, 3]]
    print(lis)  # [2, 3, 4]
    

    字典生成式

    字典生成式可以用来生成新的字典

    dic = {i: i**2 for i in range(3)}
    print(dic)  # {0: 0, 1: 1, 2: 4}
    

    zip()函数

    zip() 函数用于将可迭代的对象作为参数, 将对象中对应的元素压缩成一个个元祖, 然后返回由这些元祖组成的对象.

    • 我们可以使用list()转换来输出列表
    • 如果各个迭代器的元素个数不一致, 则返回列表长度以最短的为准
    • 利用*操作符, 可以将元祖解压为列表
    a = [1, 2, 3]
    b = [4, 5, 6]
    c = [4, 5, 6, 7, 8]
    
    zipped = zip(a, b)
    print(zipped)  # <zip object at 0x000000000A0012C8> 返回多个元祖组成的对象
    print(list(zipped))  # [(1, 4), (2, 5), (3, 6)]
    
    print(list(zip(a, c))) # [(1, 4), (2, 5), (3, 6)] 以短的为准
    
    a1, b1 = zip(*zip(a,b))  # zip(*) 可理解为解压
    print(list(a1))  # [1, 2, 3]
    print(list(b1))  # [4, 5, 6]
    

    生成器

    • 生成器本质上就是一个自定义的迭代器
    • 含有yield关键字的函数叫做生成器
    def gene():
        print(1)
        yield 1
        print(2)
        yield 2
        
    g = gene()
    print(g)  # <generator object gene at 0x0000000009F81258>
    
    
    print(g.__next__())  # 1  1
    print(g.__next__())  # 2  2
    
    • yield的特性:
      1. 暂停函数
      2. 通过__next__取后面的值

    递归

    • 递归是一种特殊的函数嵌套, 既在函数内部直接调用函数本身

    • 递归函数的特性:

      1. 函数内部调用函数本身
      2. 递归必须要有规律
      3. 必须要有退出条件
    count = 0
    
    def func():
        global count
        count +=1
        print(count)
        if count == 5:
            return
        a()
        
    '''
    1
    2
    3
    4
    5
    '''
    
    
  • 相关阅读:
    javascript数据结构
    uni-app — 一套前端开发跨平台应用的终极解决方案
    从函数式编程到Ramda函数库(二)
    从函数式编程到Ramda函数库(一)
    node.js爬取数据并定时发送HTML邮件
    vue cli3.0 结合echarts3.0和地图的使用方法
    vue加载优化策略
    C#时间格式化
    wpf 调用线程无法访问此对象,因为另一个线程拥有该对象。
    使用oracle数据库开发,异常总结
  • 原文地址:https://www.cnblogs.com/bigb/p/11580954.html
Copyright © 2020-2023  润新知