• Python 匿名函数 lambda


    python 使用 lambda 来创建匿名函数。

    所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

        lambda 只是一个表达式,函数体比 def 简单很多。
        lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
        lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
        虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

    使用场景:
    1.需要将一个函数对象作为参数来传递时,可以直接定义一个lambda函数(作为函数的参数或返回值)
    2.要处理的业务符合lambda函数的情况(任意多个参数和一个返回值),并且只有一个地方会使用这个函数,不会在其他地方重用,可以使用lambda函数
    3.与一些Python的内置函数配合使用,提高代码的可读性


    语法

    lambda 函数的语法只包含一个语句 (语法:lambda 参数:表达式),如下:

    lambda [arg1 [,arg2,.....argn]]:expression


    如下实例:
    实例(Python 3.0+)

    #!/usr/bin/python3
     
    # 可写函数说明
    sum = lambda arg1, arg2: arg1 + arg2
     
    # 调用sum函数
    print ("相加后的值为 : ", sum( 10, 20 ))
    print ("相加后的值为 : ", sum( 20, 20 ))


    以上实例输出结果:

    相加后的值为 :  30
    相加后的值为 :  40

    匿名函数的多种形式

    # 无参数
    lambda_a = lambda: 100
    print(lambda_a())
     
    # 一个参数
    lambda_b = lambda num: num * 10
    print(lambda_b(5))
     
    # 多个参数
    lambda_c = lambda a, b, c, d: a + b + c + d
    print(lambda_c(1, 2, 3, 4))
     
    # 表达式分支
    lambda_d = lambda x: x if x % 2 == 0 else x + 1
    print(lambda_d(6))
    print(lambda_d(7))

    lambda作为一个参数传递

    def sub_func(a, b, func):
        print('a =', a)
        print('b =', b)
        print('a - b =', func(a, b))
     
     
    sub_func(100, 1, lambda a, b: a - b)

    运行结果:

        a = 100
        b = 1
        a - b = 99

    上面的代码中,sub_func中需要传入一个函数,然后这个函数在sub_func里面执行,这时候我们就可以使用lambda函数,因为lambda就是一个函数对象。


    lambda函数与Python内置函数配合使用

    member_list = [
        {"name": "风清扬", "age": 99, "power": 10000},
        {"name": "无崖子", "age": 89, "power": 9000},
        {"name": "王重阳", "age": 120, "power": 8000}
    ]
    new_list = sorted(member_list, key=lambda dict_: dict_["power"])
    print(new_list)
     
     
    number_list = [100, 77, 69, 31, 44, 56]
    num_sum = list(map(lambda x: {str(x): x}, number_list))
    print(num_sum)

    运行结果:

    [{'name': '王重阳', 'age': 120, 'power': 8000}, {'name': '无崖子', 'age': 89, 'power': 9000}, {'name': '风清扬', 'age': 99, 'power': 10000}]
    [{'100': 100}, {'77': 77}, {'69': 69}, {'31': 31}, {'44': 44}, {'56': 56}]

    上面的sorted是Python中对列表排序的内置函数,我们使用lambda来获取排序的key。

    map是Python中用来做映射的一个内置函数,接收两个参数,第一个参数是一个函数,第二个参数是一个可迭代对象,map会遍历可迭代对象的值,然后将值依次传递给函数执行。我们使用lambda来实现map中的函数参数。


    lambda作为函数的返回值

    def run_func(a, b):
        return lambda c: a + b + c
     
     
    return_func = run_func(1, 10000)
    print(return_func)
    print(return_func(100))

    运行结果:

    <function run_func.<locals>.<lambda> at 0x00000254E4C94158>
    10101

    匿名函数可以作为一个函数的返回值,在上面的代码中,run_func返回的是一个匿名函数,返回的是一个函数对象,当我们执行这个函数时,可以得到lambda函数的结果。

    注意:其中的a,b两个参数是run_func中的参数,但我们执行返回的函数return_func时,已经不在run_func的作用域内了,而lambda函数仍然能使用a,b参数。说明lambda函数会将它的运行环境保存一份,一直保留到它自己执行的时候使用。

    REF

    https://www.runoob.com/python3/python3-function.html

    https://blog.csdn.net/weixin_43790276/article/details/90730797

  • 相关阅读:
    【C#进阶系列】06 类型和成员基础
    纪中5日T1 1564. 旅游
    纪中17日T1 2321. 方程
    纪中17日T2 2322. capacitor
    纪中10日T1 2313. 动态仙人掌
    纪中14日听课小结 图论 最短路 二分图 差分约束
    一个抓猫的游戏 消遣GAME 持续更新中!
    洛谷P1464 Function  HDU P1579 Function Run Fun
    洛谷P1976 鸡蛋饼
    纪中12日T1 2307. 选择
  • 原文地址:https://www.cnblogs.com/emanlee/p/15811287.html
Copyright © 2020-2023  润新知