zoukankan      html  css  js  c++  java
  • 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
    '''
    
    
  • 相关阅读:
    SELENIUM2 使用JavascriptExecutor在页面Javascipt执行
    用Merge来改写相关更新的例子
    Oracle --获取绑定变量的值.
    [NewLife.XCode]高级统计(数据报表利器)
    [NewLife.XCode]分表分库(百亿级大数据存储)
    [NewLife.XCode]导入导出(实体对象百变魔君)
    [NewLife.XCode]角色权限
    [NewLife.XCode]实体工厂(拦截处理实体操作)
    [NewLife.XCode]百亿级性能
    [NewLife.XCode]对象字典缓存(百万军中取敌首级)
  • 原文地址:https://www.cnblogs.com/bigb/p/11580954.html
Copyright © 2011-2022 走看看