什么是 Lambda 函式?

Lambda 函式,也称为匿名函式,是一种在单行内定义的小函式。它不需要像一般函式一样使用 def 关键字来定义函式名称,而是直接使用 lambda 关键字来表示Lambda 函式的语法非常简洁,通常用于一些简单的运算或作为其他函式的参数。

Lambda 函式的语法

lambda arguments: expression

  • lambda:关键字,表示定义一个匿名函式。
  • arguments:函式的参数,可以有多个,用逗号分隔。
  • expression:函式的运算表达式,也就是函式的返回值。

Lambda 函式的例子

# 传统函式写法
def square(x):
return x * x

# Lambda 函式写法
square = lambda x: x * x

# 两者效果相同,都可以计算一个数的平方
print(square(5)) # 输出 25

Lambda 函式的常见用法

作为其他函式的参数:- map()函式:将函式应用于可迭代对象的每个元素。- filter() 函式:过滤可迭代对象中的元素。- reduce() 函式:将函式应用于可迭代对象的元素,从左到右累积结果。- sorted(arguments**,**key=lambda x: expression) 函式:用于排序可迭代对象。

map:将函式应用到序列的每个元素上。

map(function, iterable)function: 要应用于每个元素的函式。iterable: 可迭代对象,也就是要进行操作的数据集合。

numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x*x, numbers))
print(squared) # 输出 [1, 4, 9, 16]

filter:过滤序列中的元素

filter(function, iterable)function: 这个函式会返回一个布林值,表示元素是否符合条件。iterable: 要进行筛选的可迭代对象。

numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 输出 [2, 4]

sorted:对可迭代对象进行排序。

sorted(iterable, key=None, reverse=False)

fruits = [\'banana\', \'apple\', \'orange\']
sorted_fruits = sorted(fruits, key=lambda x: x[-1])
print(sorted_fruits) # 输出 [\'banana\', \'orange\', \'apple\']

最终的排序结果是按照水果名称的最后一个字母的字母序x[-1]进行排序的。

  • iterable: 要排序的可迭代物件。
  • key: 一个自订的函式,用来指定排序的依据。这个函式会对每个元素进行操作,并传回一个值,排序就是根据传回的值进行的。
  • reverse: 一个布林值,指定排序顺序。 True 表示降序,False 表示升序(预设)。

关于 map、filter 和 sorted 中 iterable 的位置

不晓得你有没有发现,在map、filter 和 sorted 中 iterable 的位置有点不同?

  • map 与 filter:map(function, iterable)iterable(要操作的序列)总是放在 function(要套用的函式)的后面。这是因为 map 和 filter 的主要目的是对序列中的每个元素应用一个函式,所以序列本身就是操作的物件。r

  • sorted:sorted(iterable, key=None, reverse=False)iterable 放在 key(排序的依据)的前面。这是因为 sorted 的主要目的是对序列iterable进行排序,而 key 是一个可选参数,用于指定排序的依据。

Lambda 函式的优缺点

  • 优点:
    • 简洁: 对于简单的运算,Lambda 函式可以写得非常简洁。
    • 灵活: 可以作为参数传递给其他函式,提高程式码的可读性。
  • 缺点:
    • 可读性: 过于复杂的 Lambda 表达式可能降低程式码的可读性。
    • 单行限制: Lambda 函式通常只能写一行,对于复杂的逻辑不太适合。

何时使用 Lambda 函式?

简单的运算: 对于一些简单的运算,如平方、求绝对值等,Lambda 函式非常适合。作为回调函式: 在使用一些库函式时,需要传入一个函式作为参数,Lambda 函式可以简化写法。与高阶函式结合: map、filter、sorted 等高阶函式与 Lambda 函式配合使用,可以写出非常简洁的程式码。

总结

Lambda 函式作为 Python 的一个重要特性,可以让程式码更加简洁和灵活。但过度使用 Lambda 函式也可能降低程式