• Python基础篇(07):高阶函数lambda、zip、map、filter、reduce和函数注解


    一、匿名函数 lambda 表达式

    1、格式  

    lambda 参数: 表达式

    • 冒号前是参数,可以有多个,用逗号隔开
    • 冒号右边的为表达式
    • 返回值是一个函数对象

    2、举例:一个最简单的lambda函数

    1. add = lambda x, y: x + y
    2. print(type(add)) #
    3. print(add(3, 5)) # 8

    3、与sorted()函数结合使用

    1. 首先介绍下sort()sorted()的区别

    1. sort() 是 list 的方法,只有 list 能用,而sorted() 是内置函数,可以对所有可迭代的对象进行排序操作
    2. list 的 sort() 是原地排序,会改变原来列表的顺序,无返回值;而内置函数 sorted()不会改变原来列表的顺序,返回一个新的 list

    2. sorted()函数的用法

    语法:sorted(iterable, key=None, reverse=False)
    1. 参数:
    2. iterable – 可迭代对象。例如:列表或字典
    3. key – 对可迭代对象中给定元素的每一项进行排序。
    4. 只有一个参数,具体的函数参数取自于可迭代对象
    5. reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

    3. sort()和sorted()的使用示例

    1. # sort() 的使用示例
    2. lst = [3, 1, 4, 1, 5, 9, 2, 6, 5]
    3. lst.sort()
    4. print(lst) # 输出:[1, 1, 2, 3, 4, 5, 5, 6, 9]
    5. # sorted() 的使用示例
    6. lst = [3, 1, 4, 1, 5, 9, 2, 6, 5]
    7. new_lst = sorted(lst)
    8. print(new_lst) # 输出:[1, 1, 2, 3, 4, 5, 5, 6, 9]
    9. print(lst) # 输出:[3, 1, 4, 1, 5, 9, 2, 6, 5]

    4. lambda 函数结合 sorted() 方法排序的经典例子

    1. list1 = [5, -3, 1, 8, -4]
    2. list2 = sorted(list1, key=lambda x: abs(x)) # 对 list1 中的每个元素取绝对值进行排序
    3. print(list2) # 输出:[1, -3, -4, 5, 8]

     二、zip 函数

    1、举例:一个最简单的zip函数

    1. l1 = [1, 2, 3]
    2. l2 = ['x', 'y']
    3. print(zip(l1, l2)) #
    4. print(list(zip(l1, l2))) # [(1, 'x'), (2, 'y')]
    5. print(dict(zip(l1, l2))) # {1: 'x', 2: 'y'}
    • python 3中 zip 方法合并列表后生成的是 zip 对象
    • 使用 list 方法可以将其变成元组对列表(元组对的数量以合并列表的最短长度为准)
    • 使用 dict 方法可以将其变成字典(长度以合并列表的最短长度为准)

    2、实际上 zip 方法支持所有可迭代对象(字符串、列表、元祖、字典),而不仅仅是列表。利用这个特性,可以很容易创建各种字典。

    1. ls1 = [1, 2, 3]
    2. str1 = "abc"
    3. print(dict(zip(ls1, str1))) # 输出:{1: 'a', 2: 'b', 3: 'c'}
    4. name = ["John", "Jim", "Lucy"]
    5. year = [1983, 1985, 1995]
    6. for name, year in zip(name, year):
    7. print("%s - %s" % (name, year))
    8. """
    9. 输出:
    10. John - 1983
    11. Jim - 1985
    12. Lucy - 1995
    13. """

    三、map 函数

    1、说明

    map 函数会根据传入的函数对指定序列做映射

    2、语法

    map(function, iterable, ...)
    参数描述
    function需要传入的函数,可以是内置函数,也可以是自定义函数,或者匿名函数
    iterable可迭代对象,如 列表字符串元祖字典 等等

    3、返回值

    返回的是一个 map 对象,注意不是列表不能直接输出,可以通过 for 循环 或者 list() 来显示。

    4、举例:通过 map 函数实现求传入的 list 的每个元素的绝对值

    1. l1 = [1, -2, -3]
    2. map_abs = map(abs, l1)
    3. print(list(map_abs)) # [1, 2, 3]
    4. for val in map_abs:
    5. print(val) # 映射完没内容输出

    四、filter 函数

    1、说明

    filter 函数会根据传入的函数对指定序列做过滤

    2、语法

    filter(function, iterable)
    参数描述
    function需要传入的函数,可以是内置函数,也可以是自定义函数,或者匿名函数
    iterable可迭代对象,如 列表字符串元祖字典 等等

    3、返回值

    返回的是一个 filter 对象,注意不是列表不能直接输出,可以通过 for 循环 或者 list() 来显示

    4、举例:通过 filter 函数上实现求传入的 list 的偶数元素的功能

    1. def is_even(num):
    2. return num % 2 == 0
    3. filter_even = filter(is_even, [2, 5, 6])
    4. for val in filter_even:
    5. print(val) # 2 6

    五、reduce 函数

    1、说明

    1. reduce() 函数是对传入的 参数 序列中的每一个元素进行累积操作
    2. Python3 中,reduce 函数使用之前需要使用 from functools import reduce 语句导入包

    2、语法

    reduce(function, iterable[, initializer])
    
    参数描述
    function需要传入的函数,可以是内置函数,也可以是自定义函数,或者匿名函数
    iterable可迭代对象,如 列表字符串元祖字典 等等
    initializer可选参数,初始参数。

    3、返回值

    对 iterable 里的每个元素做累积处理,处理完毕后返回。

    4、举例:使用reduce 函数求所有元素的乘积

    1. from functools import reduce
    2. reduce_res = reduce(lambda x, y: x * y, [1, 2, 3, 4])
    3. print(reduce_res) # 24

    六、Python函数注解

    1、说明

    函数注解是Python 3.5 引入的,目的是提供一个标准方法来注释函数的参数和返回值

    2、语法

    def func(param1:param1 note, param2:param2 note=default val)->return val note:
        pass
    
    参数描述
    param1形参1。
    param1 note形参1 的注解。
    param2形参2。
    param2 note形参2 的注解。
    default val形参2的默认值。
    val note返回值的注解。

    3、获取函数注解信息语法

    print(func_name.__annotations__)
    
    参数描述说明
    func_name需要获取注解信息的函数。可以获取函数名为 func_name 的注解信息

    4、举例:通过圆半径计算圆周长

    1. # 通过圆半径计算圆周长
    2. def circle(r: "圆的半径") -> "返回圆的周长":
    3. return 2 * 3.14 * r
    4. res = circle(10)
    5. print("圆的周长是:{}".format(res))
    6. print(circle.__annotations__)
    7. """
    8. 输出:
    9. 圆的周长是:62.800000000000004
    10. {'r': '圆的半径', 'return': '返回圆的周长'}
    11. """

  • 相关阅读:
    python简单实现网络爬虫
    initPropertySource()方法具有什么功能呢?
    微服务-Git-2022
    前端工程化——前后端分离,进化流程
    【小月电子】XILINX FPGA开发板(XLOGIC_V1)系统学习教程-LESSON8 LCD1602液晶显示
    Java使用正则表达式判断独立字符的存在
    C# 进行 Starlink 仿真02:先搞个小型 Walker 星座 ===> 创建“十字形”星间链路(升轨、降轨采用不同颜色)
    生成patch
    推荐几款最好用的MySQL开源客户端,建议收藏!
    C++,STL(补)vector底层实现、动态数组
  • 原文地址:https://blog.csdn.net/qq_23440467/article/details/132775046