zoukankan      html  css  js  c++  java
  • 58.匿名函数

    匿名函数

    用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。

    lambda函数的语法只包含一个语句,如下:

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

    如下实例:

    sum = lambda arg1, arg2: arg1 + arg2
    
    # 调用sum函数
    print("Value of total : " % sum( 10, 20 ))
    print("Value of total :  "% sum( 20, 20 ))

    以上实例输出结果:

    Value of total :  30
    Value of total :  40

    Lambda函数能接收任何数量的参数但只能返回一个表达式的值

    匿名函数不能直接调用print,因为lambda需要一个表达式

    应用场合

    函数作为参数传递

    1. 自己定义函数
    >>> def fun(a, b, opt):
    ...     print("a = " % a)
    ...     print("b = " % b)
    ...     print("result =" % opt(a, b))
    ...
    >>> fun(1, 2, lambda x,y:x+y)
    a = 1
    b = 2
    result = 3

      2.作为内置函数的参数

    想一想,下面的数据如何指定按age或name排序?

    stus = [
        {"name": "zhangsan", "age": 18}, 
        {"name": "lisi", "age": 19}, 
        {"name": "wangwu", "age": 17}
    ]

    按name排序:

    >>> stus.sort(key = lambda x: x['name'])
    >>> stus
    [{'age': 19, 'name': 'lisi'}, {'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}]

    按age排序:

    >>> stus.sort(key = lambda x: x['age'])
    >>> stus
    [{'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}, {'age': 19, 'name': 'lisi'}]

    例子1:

    # 匿名函数
    # 01: 对函数的另一种解释
    # 02: 作为函数的参数传递
    # 03: 应用于在列表中进行自定义排序(list.sort-> key)
    
    # 无参数无返回值
    # def func1():
    #     print("你好")
    # func1()
    # 匿名函数的定义
    f = lambda : print("你好")
    # 调用
    f()

    例子2:

    # 无参数有返回值
    # def func2():
    #     return 3.14
    # pi = func2()
    # print(pi)
    # 匿名函数的定义
    f = lambda : 3.14
    pi = f()
    print(pi)

    例子3:

    # 有参数无返回值
    # def func3(name):
    #     print("你好%s" % name)
    # func3("中国")
    f = lambda name, age : print("你好%s--%d" % (name, age))
    f("龟叔", 60)

    例子4:

    # 有参数有返回值
    # def func4(a, b):
    #     return a + b
    # ret = func4(10, 20)
    # print(ret)
    
    f = lambda a, b : a + b
    ret = f(20, 30)
    print(ret)
    作为函数的参数传递

    例子5:

    # 01:
    
    b = 10
    # 定义一个函数 计算两个数求和 一个数为10 另一个不确定
    def add2num(a):
        ret = a + b
        print(ret)
    
    add2num(20)

    例子6:

    num = 10
    # 定义一个函数 计算两个数求和 一个数为10 另一个不确定
    def add2num(a, b):
        ret = a + b
        print(ret)
    
    add2num(20, num)

    例子7:

    # 02:
    def add2num(a, b):
        return a + b
    
    # result = add2num(10, 20)
    # print(result)
    my_func = add2num
    
    result = my_func(10, 20)
    print(result)

    例子8:

    # 03:
    # 定义一个函数计算三个数的求和
    def add3num(a, b, c):
        return a + b + c
    
    # 定义一个函数计算三个数的平均值
    def average3num(num1, num2, num3):
        ret = add3num(num1, num2, num3)
        return ret / 3
    
    result = average3num(10, 20, 30)
    print(result)

    例子9:

    # def add3num(a, b, c):
    #     return a + b + c
    # 转成匿名函数
    f = lambda a, b, c : a + b + c
    
    # 定义一个函数计算三个数的平均值
    def average3num(num1, num2, num3, func):
        ret = func(num1, num2, num3)
        return ret / 3
    
    # result = average3num(10, 20, 30, f)
    result = average3num(10, 20, 30, (lambda a, b, c : a + b + c))
    
    print(result)
    应用于在列表中进行自定义排序(list.sort-> key)

    例子10:

    # 定义一个列表
    my_list = [3, 5, 10, -100, 100]
    my_list.sort()
    print(my_list)

    运行结果:

    [-100, 3, 5, 10, 100]

    例子11:

    stus = [{"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}, {"name": "wangwu", "age": 17}]
    # [{"name": "wangwu", "age": 17}, {"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}]
    for dict in stus:
        print(dict["age"])
    # age
    stus.sort(key=lambda dict:dict["age"])
    print(stus)

    运行结果:

    18
    19
    17
    [{'name': 'wangwu', 'age': 17}, {'name': 'zhangsan', 'age': 18}, {'name': 'lisi', 'age': 19}]

    例子12:

    stus = [{"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}, {"name": "wangwu", "age": 17}]
    # [{"name": "wangwu", "age": 17}, {"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}]
    for dict in stus:
        print(dict["age"])
    # age
    stus.sort(key=lambda dict:dict["age"], reverse=True)
    print(stus)

    运行结果:

    18
    19
    17
    [{'name': 'lisi', 'age': 19}, {'name': 'zhangsan', 'age': 18}, {'name': 'wangwu', 'age': 17}]

    例子13:

    stus = [{"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}, {"name": "wangwu", "age": 17}]
    # [{"name": "wangwu", "age": 17}, {"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}]
    for dict in stus:
        print(dict["age"])
    # age
    # stus.sort(key=lambda dict:dict["age"], reverse=True)
    # print(stus)
    # name
    stus.sort(key=lambda dict: dict["name"])
    print(stus)

    运行结果:

    18
    19
    17
    [{'age': 19, 'name': 'lisi'}, {'age': 17, 'name': 'wangwu'}, {'age': 18, 'name': 'zhangsan'}]

    例子14:

    # 列表
    m_list = [[10, 2, 111], [8, 2, 11], [9, 5, 100]]
    m_list.sort(key=lambda l:l[2])
    print(m_list)

    运行结果:

    [[8, 2, 11], [9, 5, 100], [10, 2, 111]]
  • 相关阅读:
    3年A班,从现在起大家都是人质-观后感
    深入浅出的Object.defineProperty()
    在Vue中使用插槽(solt)
    非父子组件间的传值
    给组件绑定原生事件
    组件参数校验与非props特性
    Vue父子组件的数据传递
    Vue组件使用中的细节点
    vue中set基本用法
    vue中的列表渲染
  • 原文地址:https://www.cnblogs.com/kangwenju/p/12847010.html
Copyright © 2011-2022 走看看