在Python中,lambda是一个关键字,用于创建小型匿名函数。匿名函数意味着函数没有具体的名称。lambda函数可以接受任意数量的参数,但只能有一个表达式。表达式的结果就是这个函数的返回值。由于lambda函数的简洁性,它们通常用于需要将函数作为参数传递或需要在代码中进行简单计算的场合。

语法

lambda函数的基本语法如下:

lambda 参数1, 参数2, ... : 表达式

这里是一个简单的例子,它定义了一个lambda函数来计算两个数的和:

sum = lambda x, y: x + y
print(sum(5, 3))  # 输出 8

作为高阶函数参数传递

map()函数

map()函数:lambda函数可以作为map()函数的参数,用于将函数应用于可迭代对象中的每个元素。

例如算出列表中每个元素的平方:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(map(lambda x: x**2, numbers))) # [1, 4, 9, 16, 25, 36, 49, 64, 81]

filter()函数

filter()函数:lambda函数可以作为filter()函数的参数,用于过滤列表或其他可迭代对象中的元素。

例如过滤出列表中的偶数:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(filter(lambda x: x % 2 == 0, numbers))) # [2, 4, 6, 8]

sorted()函数

sorted()函数:lambda函数可以作为sorted()函数的key参数,用于指定排序规则。

例如按照字符串长度对列表进行排序:

words = ['apple', 'orange', 'banana', 'pear', 'cherry']
print(sorted(words)) # ['apple', 'banana', 'cherry', 'orange', 'pear']
print(sorted(words, key=lambda l: len(l))) # ['pear', 'apple', 'orange', 'banana', 'cherry']

reduce()函数

reduce()函数:lambda函数可以作为reduce()函数的参数,用于将可迭代对象中的元素归约为单个值。

注意:reduce()函数位于functools模块中。

例如,计算列表中所有元素的乘积:

from functools import reduce
numbers = [1, 2, 3, 4, 5]
area = reduce(lambda x, y: x * y, numbers)
print(area) # 120

作为回调函数

你也可以在自定义函数中接受一个回调函数,并传递一个lambda表达式。

def apply_callback(data, callback):
    return callback(data)

result = apply_callback(5, lambda x: x ** 2)
print(result)  # 输出: 25

作为其他函数的返回值

lambda函数也可以作为其他函数的返回值,通常用于创建简单的回调函数或动态定义函数。

例如,定义一个函数来创建加法器:

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

add_5 = make_adder(5)
result = add_5(10)
print(result)  # 输出: 15

注意事项

lambda函数只能包含一个表达式,不能包含多个语句或复杂逻辑。

lambda函数是匿名的,通常只用于临时用途,如果需要重用函数逻辑,应该使用标准的def语句定义函数。

过度使用lambda函数可能会导致代码难以理解,尤其是在复杂的逻辑中。因此,在适当的时候使用lambda函数可以提高代码的简洁性,但也需要保持代码的可读性。