zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    OOP 三大特点:继承性,封装性,多态性
    PHP 知识点
    ELK安装和配置及常用插件安装
    istio1.2.2 安装及使用示例
    动态扩展磁盘(LVM)
    kuberadm集群升级
    nginx+nginx-upsync-module实现配置动态更新
    kubernetes资源优化
    ingress controller 和ingress使用实例
    helm安装及使用
  • 原文地址:https://www.cnblogs.com/emanlee/p/15811287.html
Copyright © 2011-2022 走看看