Python 中的Lambda 函数是匿名函数,可以内联定义和声明,与代码的其余部分一起。
什么是 Python 中的 Lambda 函数
在 Python 中,lambda 函数是一种简洁的方法,用于创建小型匿名函数。与使用 def
关键字定义的普通函数不同,lambda 函数使用 lambda
关键字创建,通常用于简短的立即操作。
lambda 函数的语法很简单
lambda arguments: expression
此处,lambda
是关键字,arguments
是函数的输入参数,expression
是函数执行的操作。
以下还列出了一些声明和用法示例
基本加法
add = lambda x, y: x + y
print(add(3, 4)) # Output: 7
在高阶函数中使用
numbers = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x * 2, numbers))
print(doubled) # Output: [2, 4, 6, 8, 10]
对元组列表排序
students = [('Alice', 25), ('Bob', 20), ('Charlie', 30)]
students.sort(key=lambda x: x[1])
print(students) # Output: [('Bob', 20), ('Alice', 25), ('Charlie', 30)]
当在短时间内需要一个小型函数时,lambda 函数特别方便。在定义普通函数可能过于繁琐的情况下,它们的简单性很有益。
需要记住的关键点
- Lambda 函数是匿名的,不需要名称。
- 它们可以在一行内处理简单的操作。
- 通常与 map、filter 和 sort 等高阶函数一起使用。
在 Python 编程中使用 Lambda 函数的好处和原因
-
简洁的代码:lambda 函数可以在一行代码中定义,使其易于使用和阅读。
-
易于从另一个 Python 文件使用函数:你可以使用
lambda
函数定义一个函数,该函数可以从另一个 Python 文件中使用。 -
函数式编程:lambda 函数使 Python 程序员能够使用函数式编程技术,从而更容易编写纯净且模块化的代码。
lambda 函数的示例
x = lambda a : a + 10
print(x(5)) # output: 15
在此示例中,使用参数 a
定义了一个 lambda
函数。该函数将 10
添加到参数并返回结果。然后使用参数 5
调用 lambda
函数,输出结果为 15
。
Python 中 Lambda 函数的示例和用例
-
对元组列表排序:lambda 函数可以用作
sorted()
函数中的键参数,以根据元组中的特定元素对元组列表进行排序。
# Sorting a list of tuples based on the age of a person
people = [('Jane', 23), ('John', 19), ('Adam', 25), ('Kate', 18)]
sorted_people = sorted(people, key=lambda x: x[1])
print(sorted_people)
# Output: [('Kate', 18), ('John', 19), ('Jane', 23), ('Adam', 25)]
-
过滤列表:lambda 函数可以与
filter()
一起使用,以创建一个满足特定条件的新列表。
# Filter a list of numbers greater than 5
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filtered_numbers = list(filter(lambda x: x > 5, numbers))
print(filtered_numbers)
# Output: [6, 7, 8, 9, 10]
Python 中 Lambda 函数和普通函数之间的差异
-
语法:lambda 函数编写在一行代码中,不需要
def
关键字。普通函数使用def
关键字定义,可以编写在多行中。 -
参数:lambda 函数可以具有任意数量的参数,但只能有一个表达式。普通函数可以接受任意数量的参数,并且可以有多个表达式。
-
名称:Lambda 函数是匿名的,这意味着它们没有名称。常规函数具有用于调用函数的名称。
-
范围:Lambda 函数在范围方面受到限制,只能访问全局 变量。常规函数具有更广泛的范围,可以访问局部变量和全局变量。
在 Python 中使用 Lambda 函数的最佳实践
-
保持 Lambda 函数简洁明了:Lambda 函数最适合用于可以在一行代码中简洁编写的微小操作。如果函数太长或太复杂,最好编写常规 Python 函数。
-
将 Lambda 函数与
map()
、filter()
和reduce()
结合使用:这些高阶函数需要一个函数参数,而 Lambda 函数是即时创建简单函数的绝佳方式。 -
不要过度使用 Lambda 函数:虽然 Lambda 函数对于某些任务很有用,但如果过度使用,它们也会降低代码的可读性。如果 Python 中的 Lambda 表达式太长,最好改写为常规 Python 函数。
高级 Lambda 概念:map()、reduce() 和 filter()
map()
函数用于将给定的 lambda 函数应用于集合中的每个元素。结果是一个新集合,lambda 函数已应用于每个元素。以下是如何使用 map 函数使用 lambda 函数向列表中每个元素添加常量值的示例
numbers = [1, 2, 3, 4, 5]
add_two = lambda x: x + 2
result = map(add_two, numbers)
print(list(result)) # [3, 4, 5, 6, 7]
reduce()
函数用于将给定的 lambda 函数应用于集合并将其缩减为单个值。lambda 函数应采用两个参数并返回单个值。以下是如何使用 reduce 函数使用 lambda 函数计算列表中所有 数字 的乘积的示例
from functools import reduce
numbers = [1, 2, 3, 4, 5]
multiply = lambda x, y: x * y
result = reduce(multiply, numbers)
print(result) # 120
filter()
函数用于将给定的 lambda 函数应用于集合中的每个元素,并过滤掉不满足特定条件的元素。结果是一个新集合,其中仅包含满足条件的元素。以下是如何使用 filter 函数仅保留列表中偶数的示例,方法是使用 lambda 函数
numbers = [1, 2, 3, 4, 5]
is_even = lambda x: x % 2 == 0
result = filter(is_even, numbers)
print(list(result)) # [2, 4]
探索在 Python 代码中使用 Lambda 函数的限制和注意事项
lambda 函数的一个限制是它们仅限于单个表达式。这意味着无法在 lambda 函数中执行更复杂的操作,例如循环或多个 语句。例如,如果我们想使用循环在 Python 中创建幂 函数,我们不能使用 lambda 函数。
lambda 函数的另一个限制是它们不能用于定义递归函数。递归要求函数调用自身,而 lambda 函数不能引用自身。
此外,使用 lambda 函数会使代码更难阅读和理解,特别是对于复杂操作。在这种情况下,最好改用常规 Python 函数。
此外,在性能关键型代码中使用 lambda 函数可能会产生少量开销,这是由于函数创建过程造成的。在这种情况下,最好使用预定义的 Python 函数,例如 math
库中的 exp()
函数。
# Example of using the exp() function
import math
x = 2.0
y = math.exp(x)