• python基础--高阶函数


    一. 高阶函数

    把函数作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指这种高度抽象的编程范式。

    1,1体验高阶函数

    在Python中,abs()函数可以完成对数字求绝对值计算。

    abs(-10)  # 10
    

    round()函数可以完成对数字的四舍五入计算。

    round(1.2)  # 1
    round(1.9)  # 2
    

    需求:任意两个数字,按照指定要求整理数字后再进行求和计算。

    • 方法1
    def add_num(a, b):
        return abs(a) + abs(b)
    
    
    result = add_num(-1, 2)
    print(result)  # 3
    
    • 方法2
    def sum_num(a, b, f):
        return f(a) + f(b)
    
    
    result = sum_num(-1, 2, abs)
    print(result)  # 3
    

    注意:两种方法对比之后,发现,方法2的代码会更加简洁,函数灵活性更高。

    函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快。

    1.2 内置高阶函数

    1.2.1 map()

    map(func, lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(Python2)/迭代器(Python3)返回。

    需求:计算list1序列中各个数字的2次方。

    list1 = [1, 2, 3, 4, 5]
    
    
    def func(x):
        return x ** 2
    
    
    result = map(func, list1)
    
    print(result)  # <map object at 0x0000013769653198>
    print(list(result))  # [1, 4, 9, 16, 25]
    

    1.2.2 reduce()

    reduce(func,lst),其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累积计算。

    注意:reduce()传入的参数func必须接收2个参数。

    需求:计算list1序列中各个数字的累加和。

    import functools
    
    list1 = [1, 2, 3, 4, 5]
    
    
    def func(a, b):
        return a + b
    
    
    result = functools.reduce(func, list1)
    
    print(result)  # 15
    

    1.2.3 filter()

    filter(func, lst)函数用于过滤序列, 过滤掉不符合条件的元素, 返回一个 filter 对象。如果要转换为列表, 可以使用 list() 来转换。

    list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    
    def func(x):
        return x % 2 == 0
    
    
    result = filter(func, list1)
    
    print(result)  # <filter object at 0x0000017AF9DC3198>
    print(list(result))  # [2, 4, 6, 8, 10]
    

    总结

    • 高阶函数

      • 作用:把函数作为参数传入,化简代码
      • 内置高阶函数
        • map()
        • reduce()
        • filter()
  • 相关阅读:
    可汗学院的数学从零开始学习顺序?
    判断两个数组内容是否相同
    eclipse package,source folder,folder区别及相互转换
    [垂直化搜索引擎]lucene简介及使用
    有效处理Java异常三原则
    ZeroMQ作者于昨天下午宣布选择安乐死
    linux一路填坑...
    gcc/g++/makefile/easymake/cmake/xmake/nmake ...
    RTSP客户端接收存储数据(live555库中的openRTSP实例)
    RTSP客户端接收存储数据(live555库中的testRTSPClient实例)
  • 原文地址:https://www.cnblogs.com/chenpeng03/p/13628095.html
Copyright © 2020-2023  润新知