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]]
  • 相关阅读:
    Atitit.随时间变色特效 ---包厢管理系统的规划
    Atitit.request http乱码的设计防止 检测与解决最近实践p825 attilax总结.doc
    Atitit.request http乱码的设计防止 检测与解决最近实践p825 attilax总结.doc
    atitit.薄伽梵歌overview  attilax 读后感
    Atitit。 《吠陀》 《梨俱吠陀》overview 经读后感  是印度上古时期一些文献的总称
    Atitit。 《吠陀》 《梨俱吠陀》overview 经读后感  是印度上古时期一些文献的总称
    atitit.薄伽梵歌overview  attilax 读后感
    Atitit 《摩奴法典》overivew 读后感 不是由国王 颁布的,而是 僧侣编制
    Atitit 《摩奴法典》overivew 读后感 不是由国王 颁布的,而是 僧侣编制
    Atitit.执行cli cmd的原理与调试
  • 原文地址:https://www.cnblogs.com/kangwenju/p/12847010.html
Copyright © 2011-2022 走看看