lambda函数详解

5 阅读2分钟

lambda函数

1. 定义与基本语法

  • lambda函数也被称为匿名函数,它允许你快速定义一个简单的函数,而无需使用常规的def语句。其基本语法为:lambda arguments: expression。其中,arguments是函数的参数,可以有多个,用逗号分隔;expression是一个表达式,该表达式的结果就是lambda函数的返回值。
  • 例如,定义一个简单的lambda函数来计算两个数的和:
add = lambda a, b: a + b
print(type(add))  #结果:<class 'function'>
result = add(3, 5)
print(result)  # 输出 8
  • 在这个例子中,lambda a, b: a + b定义了一个匿名函数,它接受两个参数ab,返回它们的和。add变量被赋值为这个lambda函数,然后可以像调用普通函数一样调用它。
  1. 用途
    • 作为函数参数lambda函数常作为其他函数的参数使用,特别是当需要传递一个简单的函数作为参数时,使用lambda函数可以避免额外定义一个完整的函数。例如,在sorted()函数中使用lambda函数按字典的值进行排序:
my_dict = {'c': 3, 'a': 1, 'b': 2}
sorted_dict_by_value = dict(sorted(my_dict.items(), key = lambda item: item[1]))
print(sorted_dict_by_value)
  • 这里lambda item: item[1]作为key参数传递给sorted()函数,它定义了排序的依据是字典键值对元组中的值。
  • map()filter()函数配合使用
    • map()函数map()函数接受一个函数和一个可迭代对象作为参数,它将函数应用到可迭代对象的每个元素上,并返回一个新的可迭代对象。例如,使用map()lambda函数将列表中的每个元素乘以2:
nums = [1, 2, 3, 4]
new_nums = list(map(lambda x: x * 2, nums))
print(new_nums)  # 输出 [2, 4, 6, 8]
  • filter()函数filter()函数接受一个函数和一个可迭代对象作为参数,它返回可迭代对象中使函数返回True的元素组成的新可迭代对象。例如,使用filter()lambda函数过滤出列表中的偶数:
nums = [1, 2, 3, 4]
even_nums = list(filter(lambda x: x % 2 == 0, nums))
print(even_nums)  # 输出 [2, 4]
  1. 限制
    • lambda函数只能包含一个表达式,不能包含语句,所以它适用于简单的函数逻辑。如果函数逻辑较为复杂,包含循环、条件语句等,还是应该使用常规的def语句来定义函数,这样代码的可读性和可维护性会更好。例如,下面这样复杂的逻辑就不适合用lambda函数:
# 不适合用lambda函数的复杂逻辑
def complex_function(x):
    if x > 10:
        return x * 2
    else:
        return x + 1

相比之下,这样的逻辑用常规函数定义更清晰明了。