python lambda函数用法汇总

什么是 Lambda 函数?

在python语言中,lambda 也称匿名函数,它只有1行,非常简洁,但与其它函数一样,可以接收多个参数,返回结果。

Lambda 函数在解释器级别,被视为与常规函数相同。可以说:lambda 是返回单行表达式函数的紧凑写法。

lambda最常见的用法是函数式编程,所谓函数式编程,就是允许您将一个函数作为参数提供给另一个函数(例如,map、filter函数等)。在这种情况下,lambda函数提供了一种优雅的方式来创建一次性函数并将其作为参数传递。

语法格式

[ lambda 关键字 ] [参数列表] : [函数体]

  • 参数可以是1个或多个,不能放在括号里
  • 函数体必须是单行表达式

1) 基础用法:

>>> add_one = lambda x: x + 1
>>> add_one(2)
>>> full_name = lambda first, last: f'Full name: {first.title()} last.title()}'
>>> full_name('guido', 'van rossum')

2) 省略 lambda函数名

(lambda x, y: x + y)(2, 3)

相当于

foo = lambda x,y: x + y
foo(2,3)

3)lambda 内可以使用内置函数

(lambda *args: sum(args))(1,2,3)

4) 与filter() 联合使用,可过滤列表

filter 函数原形 filter(func, list ) , func 可以使用 lambda

ages = [13, 90, 17, 59, 21, 60, 5]
adults = list( filter(lambda age: age>18, ages) )
print(adults)

输出为:

[90, 59, 21, 60]

5) 与map() 联合使用,将函数应用于列表所有元素

What is map?

map() 方法可以将 lambda函数 应用于 list / tuple / dict 的每个元素。返回的是 map 对象。

map是内置方法,先使用常规函数与map配合:

map(func, iterable)

example

def square(x):
    return x*x
numbers = [1, 2, 3, 4, 5]
square_numbers = list(map(square, numbers))
print(square_numbers)

output:

[1, 4, 9, 16, 25]

现在改用 lambda 函数,与map配合使用,代码变得相当简洁:

numbers = [1, 2, 3, 4, 5]
square_numbers = list(map(lambda x: x*x, numbers))

处理多个列表时,更为便捷。

numbers_list_1 = [1, 2, 3, 4, 5]
numbers_list_2 = [6, 7, 8, 9, 10]
square_numbers = list(map(lambda x,y: x+y, numbers_list_1, numbers_list_2))
print(square_numbers)
[7, 9, 11, 13, 15]

6) 与reduce() 联合使用,实现循环功能

reduce函数有两个参数,1个是lambda函数,另1个是可迭代的数据类型,如list, tuple 等。
运行时,reduce函数先从列表(或序列)中取出2个元素执行指定函数,并将输出结果与第3个元素传入函数,输出结果再与第4个元素传入函数,…,以此类推,直到列表每个元素都取完。

from functools import reduce
data = [1, 2, 3, 4, 5]
add = lambda x, y: x + y
print(reduce(add, data))

输出为
15

什么时候不应该使用 Lambda?

切勿在生产环境中编写复杂的 lambda 函数。写得太复杂的单行表达式,让后期维护代码的人很看懂需要记住,这时应改为标准函数来写多行代码.

总结

  • Lambda,也称为匿名函数,是不需要名称(即标识符)的小型受限函数。
  • Python 中的每个 lambda 函数都有 3 个基本部分:
    [ lambda 关键字 ] [参数列表] : [函数体]
  • Lambdas通常与以下python内置一起使用:filter, map, reduce 等函数一起使用。
    filter(lambda 参数:表达式,可迭代序列)
    map(lambda 参数:表达式,可迭代序列)
    reduce lambda 参数 1,参数 2:表达式,可迭代序列)
  • 不要在生产环境中编写复杂的 lambda 函数,因为会让代码维护者难以理解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值