zoukankan      html  css  js  c++  java
  • python迭代器及高阶函数

    每日一记

    collections.abc          # Iterator的模块
    Iterator                 # 迭代器
    Iterable                 # 可迭代对象
    ​
    functools                # 模块引入 reduce
    reduce                   # 高阶函数----> 做累计算
    ​
    dir()                    # 获取当前类的所有成员
    __closure__              # 获取闭包函数的使用变量
    func().cell_contents     # 获取func()的闭包函数
    __iter__                 # 判断是否是可迭代数据
    

      

    1、迭代器

    # 概念(可迭代对象不一定是迭代器一个迭代器就一定是一个可迭代对象)
    # 迭代取值的工具,重复上一次的结果而继续的过程
    ​
    # 特征
    # 不依赖索引,通过next指针迭代所有数据,一次取一个值,节省空间
    

      

     

    1.1 定义

    setvar = {1,2,3,4,5}
    res = iter(setvar)
    print(res)
    

      

    1.2 判断

    iter_var = iter({1,2,3,,4,5})
    print("__iter__" in dir(iter_var) and "__next__" in dir(iter_var))
    

      

    1.3 调用

    """
    next在调用迭代器中的数据时,是单向不可逆,一条路走到黑的过程
    """
    iter_var = iter({1,2,3,4,5})
    print(next(iter_var))      
    print(next(iter_var))         # 调用2次,剩下3元素
    # 没有元素则报错 -----> StopIteration 报错 停止迭代
    for i in iter_var:
        print(i)                  # i 只能循环3次
    

      

    1.4 重置

    iter_var = iter({1,2,3,4,5})  # 重新赋值
    

      

    1.5 collections 判断迭代器或可迭代对象

    from collections import Iterator,Iterable
    ​
    setvar = {1,2,3,4,5}
    iter_var = iter(setvar)
    ​
    print(isinstance(iter_var,Iterator))
    print(isinstance(setvar,Iterable))
    

      

    2、高阶函数

    # 能够把函数当成参数传递的就是高阶函数
    

      

    2.1 map(func,Iterator)

    """
    功能:
        把iterable里面所有数据 一一的放进到func这个函数中进行操作 ,把结果扔进迭代器
    参数:
        func  内置或自定义函数
        iterable 具有可迭代性的数据 ([迭代器],[容器类型的数据],[range对象])
    返回值: 
        返回最后的迭代器
    """
    # 示例一
    def func(n):
        dic = {97:"a",98:"b",99:"c"}
        dic_new = {}
        for k,v in dic.items():
            dic_new[v] = k
        return dic_new[n]
        
    print(list(map(func,["a","b","c"])))
    

      

    2.2 filter(func,Iterator)

    """
    功能: 过滤数据
          return True  当前这个数据保留
          return False 当前这个数据舍弃
    参数:
        func : 自定义函数
        iterable : 可迭代型数据(容器类型数据,range对象,迭代器)
    返回值:
        迭代器
    """
    res = filter(lambda i : True if i % 2 == 0 else False , [1,2,3,4,5,6,7,8,9,10] )
    print(res)
    res = filter(lambda x: type(x) == int ,[11,22,33,"zhou","04内置模块"])
    print(res)
    

      

    2.3 reduce(func,iterable)

    """
    功能:累计算数据
        先把iterable中的前两个值拿出来,扔到func当中做运算,
        把计算的结果和iterable中的第三个元素在扔到func当中做运算,
        再把结果算出来,和第四个元素做运算,以此类推
        直到所有结果运算完毕.返回该结果
    参数:
        func : 自定义函数
        iterable : 可迭代型数据(容器类型数据,range对象,迭代器)
    返回值:
        计算之后的结果
    """
    # 示例一 (lst = [5,4,8,8] # => 整型5488)
    from functools import reduce
    ​
    print(reduce(lambda x,y: x*10 + y,[5,4,8,8]))
    ​
    # 示例二
    # "789" => 789 禁止使用int强转   -> 数字 789
    def func1(x,y):
        return x*10 + y
    def func2(n):
        dic = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}
        return dic[n]
         # [7,8,9]
    print(reduce(func1,map(func2,"789") ))
    

      

    2.4 sorted(iterable,key=func,reverse=False)

    """
    功能:排序
    参数:
        iterable:可迭代型数据(容器类型数据,range对象,迭代器)
        key     :指定 自定义函数或 内置函数
        reverse : 代表升序或者降序 , 默认是升序(从小到大排序) reverse=False
    返回值:
        排序后的list结果
    """
    # 示例一
    lst = [1,2,3,4,5,-90,-4,-1,100]
    print(sorted(lst))
    ​
    # 示例二 (从大到小)
    res = sorted(lst,reverse=True)
    print(res)
    ​
    # 示例三 (绝对值排序 abs) 
    lst = [-10,-1,3,5]
    print(sorted(lst,key=abs))
    ​
    # 示例四 (余数从大到小排序)
    def func(n):
        return n % 10
    print(sorted(lst,key=func,reverse=True))
    ​
    # 示例五(集合排序)
    setvar= {5,8,9,5,27,2}
    print(sorted(setvar))
    ​
    # 示例六(字典排序)
    container = {"c":3,"a":1,"b":2}
    print(sorted(container))              # ['a', 'b', 'c']  排 key
    

      

     

     

     

     

  • 相关阅读:
    禁止后台运行
    图标的圆角和光晕效果和启动画面
    IOS 开发 有关iPhone程序的安装目录UUID 唯一标识
    NSOperation与performSelectorOnMainThread
    Java web开发学习规划
    JAVA类集
    java 四种xml操作方式的基本使用方法
    用JDOM操作XML文件
    java web 学习
    过去的,将来的
  • 原文地址:https://www.cnblogs.com/zhoulangshunxinyangfan/p/13355025.html
Copyright © 2011-2022 走看看