lambda 表达式是 Python 中的匿名函数。它接受任意数量的参数,并返回一个单个表达式的值。它的语法格式如下:
lambda arguments: expression


文章目录

  • lambda 函数原型解释
  • lambda 函数用作其它参数
  • lambda 函数高级的技巧
  • 多个参数
  • 返回多个值
  • 条件表达式
  • 嵌套 lambda 函数
  • lambda 实现闭包
  • lambda 注意事项
  • 总结


lambda 函数原型解释

在上述语法格式中, arguments 是参数列表,可以包含任意数量的参数, expression 是单个表达式,其值将作为函数的返回值。

下面是一个使用 lambda 表达式创建的计算两个数和的函数:

sum = lambda a, b: a + b
print(sum(33, 44)) # 输出 77

lambda 表达式的优势在于其简洁和易读性。

lambda 函数用作其它参数

lambda 函数可以作为参数传递给其它函数,这样可以使代码更简洁和灵活。
例如,我们可以使用 lambda 函数作为 sorted 函数的第二个参数,以排序一个列表:

numbers = [2, 3, 4, 5]
sorted_numbers = sorted(numbers, key=lambda x: x * -1)
print(sorted_numbers)

运行代码得到如下输出。

python的lambda使用条件语句 python中lambda_python

在上述代码中我们传递了一个 lambda 函数给 sorted() 函数的 key 参数。该函数接受一个参数 x ,并将其乘以 -1 ,以便将列表以降序排列。

lambda 函数还可以作为其它高阶函数(如 map()filter() )的参数,以实现更复杂的计算。例如,我们可以使用 lambda 函数和 map 函数来计算一个列表中所有数字的平方:

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

lambda 函数高级的技巧

多个参数

lambda 函数可以接受多个参数,并在函数体内对它们进行处理,例如:

sum = lambda x, y: x + y
result = sum(1, 2)
print(result)

返回多个值

lambda 函数可以返回多个值,并以元组形式返回。

divide = lambda x, y: (x / y, x % y)
result = divide(10, 3)
print(result)

运行代码得到如下输出。

(3.3333333333333335, 1)

条件表达式

lambda 函数可以嵌套其他函数,并在函数体内使用条件语句。

get_sign = lambda x: "开心" if x >= 0 else "不开心"
result = get_sign(-5)
print(result)

嵌套 lambda 函数

可以在一个 lambda 函数内嵌套另一个 lambda 函数

mult = lambda x: (lambda y: x * y)
result = mult(3)(4)
print(result)

lambda 实现闭包

在 Python 中,lambda 函数可以实现闭包。

def make_adder(x):
    return lambda y: x + y

add_10 = make_adder(10)
add_20 = make_adder(20)

print(add_10(5)) # 15
print(add_20(5)) # 25

在上述代码中首先定义了一个名为 make_adder() 的函数,它接收一个参数 x ,并返回一个 lambda 函数。lambda 函数接收一个参数 y ,并返回 x + y 的值。

然后通过调用 make_adder(10)make_adder(20) ,我们分别创建了两个闭包 add_10 和 add_20,它们分别对应 x = 10 和 x = 20 的情况。

最后当我们调用 add_10(5) 时,它会返回 10 + 5 = 15 ;当我们调用 add_20(5) 时,它会返回 20 + 5 = 25

lambda 注意事项

  • 代码长度:lambda 函数只能写成一行,长度需要保持在可接受的范围内。
  • 可读性:对于较长的代码块,最好使用正常的函数定义,以提高代码的可读性。
  • 错误处理:lambda 函数不支持自定义的异常处理,因此需要在调用时小心处理。

lambda 函数并不适合复杂的逻辑或计算,它们通常是用来快速定义简单函数的。

总结