美文网首页
Python- lambda、⾼阶函数

Python- lambda、⾼阶函数

作者: 喂_balabala | 来源:发表于2024-07-10 15:41 被阅读0次

    语法

    lambda 参数列表 : 表达式
    

    注意

    • lambda表达式的参数可有可⽆,函数的参数在lambda表达式中完全适⽤。
    • lambda函数能接收任何数量的参数但只能返回⼀个表达式的值
    # 函数
    def fn1():
        return 200
        
    print(fn1)
    print(fn1())
    
    # lambda表达式
    fn2 = lambda: 100
    print(fn2)
    print(fn2())
    

    注意:直接打印lambda表达式,输出的是此lambda的内存地址

    示例:计算a + b

    • 函数实现:
    def add(a, b):
        return a + b
     
    result = add(1, 2)
    print(result)
    
    • lambda实现
    print((lambda a, b: a + b)(1, 2))
    

    参数形式

    • ⽆参数
    print((lambda: 100)())
    
    • ⼀个参数
    print((lambda a: a)('hello world'))
    
    • 默认参数
    print((lambda a, b, c=100: a + b + c)(10, 20))
    
    • 可变参数:**args
    print((lambda *args: args)(10, 20, 30))
    

    注意:这⾥的可变参数传⼊到lambda之后,返回值为元组。

    • 可变参数:**kwargs
    print((lambda **kwargs: kwargs)(name='python', age=20))
    

    lambda的应⽤

    • 带判断的lambda
    print((lambda a, b: a if a > b else b)(1000, 500))
    
    • 列表数据按字典key的值排序
    students = [
     {'name': 'TOM', 'age': 20},
     {'name': 'ROSE', 'age': 19},
     {'name': 'Jack', 'age': 22}
    ]
    # 按name值升序排列
    students.sort(key=lambda x: x['name'])
    print(students)
    # 按name值降序排列
    students.sort(key=lambda x: x['name'], reverse=True)
    print(students)
    # 按age值升序排列
    students.sort(key=lambda x: x['age'])
    print(students)
    

    ⾼阶函数

    • 把函数作为参数传⼊,这样的函数称为⾼阶函数,⾼阶函数是函数式编程的体现。函数式编程就是指这种⾼度抽象的编程范式。

    需求:⼀个函数完成计算任意两个数字的绝对值之和。

    在Python中,abs() 函数可以完成对数字求绝对值计算。

    abs(-10) # 10
    
    • ⽅法1
    def add_num(a, b):
        return abs(a) + abs(b)
     
    result = add_num(-1, 2)
    print(result) # 3
    
    • ⽅法2
    def sum_num(a, b, f):
        return f(a) + f(b)
     
    result = sum_num(-1, 2, abs)
    print(result) # 3
    

    注意:两种⽅法对⽐之后,发现,⽅法2的代码会更加简洁。

    函数式编程⼤量使⽤函数,减少了代码的重复,因此程序⽐较短,开发速度较快。

    内置⾼阶函数

    map()

    map(func, lst),将传⼊的函数变量func作⽤到lst变量的每个元素中,并将结果组成新的列表(Python2)/迭代器(Python3)返回。

    需求:计算 list1 序列中各个数字的2次⽅。

    list1 = [1, 2, 3, 4, 5]
    
    def func(x):
        return x ** 2
        
    result = map(func, list1)
    
    print(result) # <map object at 0x0000013769653198>
    print(list(result)) # [1, 4, 9, 16, 25]
    

    reduce()

    reduce(func(x,y),lst),其中func必须有两个参数。每次func计算的结果继续和序列的下⼀个元素做累积计算。

    注意:reduce()传⼊的参数func必须接受2个参数。

    需求:计算 list1 序列中各个数字的累加和。

    import functools
    list1 = [1, 2, 3, 4, 5]
    
    def func(a, b):
        return a + b
     
    result = functools.reduce(func, list1)
    print(result) # 15
    

    filter()

    filter(func, lst)函数⽤于过滤序列, 过滤掉不符合条件的元素, 返回⼀个 filter 对象,。如果要转换为列表,可以使⽤list()来转换。

    list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    def func(x):
     return x % 2 == 0
     
    result = filter(func, list1)
    print(result) # <filter object at 0x0000017AF9DC3198>
    print(list(result)) # [2, 4, 6, 8, 10]
    

    相关文章

      网友评论

          本文标题:Python- lambda、⾼阶函数

          本文链接:https://www.haomeiwen.com/subject/velthjtx.html