欢迎,来自IP地址为:3.142.152.51 的朋友
Lambda 是 Python 中非常特别的函数,让我们可以编写更简洁、更高效的 Python 代码。这不仅可以提高我们的编程技能,并使代码库更为简洁、更易于管理。
Python 中的 Lambda 函数定义
在 Python 中,lambda 函数是使用 lambda 关键字定义的小型匿名函数。
这类函数通常用于简短的一次性操作,在这种情况下,完整的函数定义可能会显得多余。它们之所以被称为匿名,是因为它们不需要名称(尽管可以将它们分配给变量以供重复使用)。
Lambda 函数是在需要短时间内快速实现简单功能,而完整的函数定义又显得多余的情况下出现的。这使得它们非常适合简单易懂且可以一行写完的操作,例如简单的数学计算或基本的数据转换。
Lambda 函数特别用于函数式编程环境中,具有高阶函数(如 map、filter 和 reduce),它们通常作为参数传递。
Lambda 函数语法和基本用途
lambda arguments: expression # to give it a name, assign it to a variable: function_name = lambda arguments: expression # this is equivalent to: def function_name(arguments): return expression
与使用 def 定义的常规函数不同,lambda 函数的设计简单简洁,因此仅限于单个表达式。它们可以接受一个或多个参数,但不能包含语句或多个表达式。
Lambda 函数适用于简短、直接的操作,可以用一行写完。
例如:
Lambda 函数语法和基本用途
# Regular function to find the average of three numbers def average(x, y, z): return (x + y + z) / 3 # Lambda function to find the average of three numbers average = lambda x, y, z: (x + y + z) / 3
尽管 lambda 函数只能包含一个表达式,但我们仍然可以用它们做很多事情。
例如,这是一个 Lambda 函数,用于连接两个字符串并将其转换为大写:
concat_and_uppercase = lambda str1, str2: (f'The concatenated string is {str1 + str2}'.upper()) print(concat_and_uppercase("hello", "world")) # Output: THE CONCATENATED STRING IS HELLOWORLD
调用 Lambda 函数的方法
1. 分配给一个变量
将 lambda 函数分配给一个变量,然后使用该变量调用它:
multiply = lambda x, y: print(f'{x} * {y} = {x * y}') multiply(2, 10) # Output: 2 * 10 = 20 or multiply = lambda x, y: f'{x} * {y} = {x * y}' print(multiply(2, 10)) # Output: 2 * 10 = 20
2. 直接调用 Lambda 函数
通过将定义括在括号中并直接提供参数来定义并立即调用 lambda 函数:
print((lambda x, y: f'{x} * {y} = {x * y}')(2, 10)) # Output: 2 * 10 = 20 or (lambda x, y: print(f'{x} * {y} = {x * y}'))(2, 10) # Output: 2 * 10 = 20
3. 用作高阶函数的参数
Lambda 函数通常用作高阶函数(如 map、filter 和 reduce)的参数。
这些函数将其他函数作为参数。它们有助于以函数式编程风格处理数据集合(如列表或元组)。
map() 函数使用 lambda 函数
map 函数将指定的函数应用于可迭代对象(如列表)中的每个项目,并返回包含更新项目的新可迭代对象。
# syntax map(function, iterable)
- 此处的 function 接受一个参数并返回一个值
- iterable 的元素(例如,列表、元组)将传递给该函数
例如:
# List of pairs of numbers pairs = [(2, 3), (4, 5), (6, 7)] # Using lambda function with map to multiply each pair and print the result list(map(lambda pair: print(f'{pair[0]} * {pair[1]} = {pair[0] * pair[1]}'), pairs))
说明:在此代码中,我们使用 lambda 函数定义一个小型匿名函数,该函数接受每对数字并打印它们的乘积。
map 函数将此 lambda 函数应用于列表中的每个对(元组)。使用列表包装 map 调用可确保对每个对执行 lambda 函数。因此,代码会打印列表中每个对的乘法结果,显示”2 3 = 6″、”4 5 = 20″和”6 * 7 = 42″等输出。
filter() 函数使用 lambda 函数
filter 函数根据指定的筛选器(predicate)筛选可迭代对象中的元素。只有筛选器返回 True 的元素才会包含在新的可迭代对象中。
# syntax filter(predicate, iterable)
Predicate 是一个接受一个参数并返回布尔值(True 或 False)的函数。此处的可迭代元素将通过谓词进行测试。例如:
# List of ages ages = [25, 30, 18, 42, 17, 50, 22, 19] # Function to filter adults (age 18 and above) using filter with lambda adults = filter(lambda age: age >= 18, ages) print(list(adults)) # Output: [25, 30, 18, 42, 50, 22, 19]
reduce() 函数使用 lambda 函数
Reduce 函数将指定的 function 累积应用于可迭代对象的元素,以将其缩减为单个值。它是 functools 模块的一部分。
# syntax from functools import reduce reduce(function, iterable)
这里,function 接受两个参数并返回一个值。可迭代元素将由该函数处理。
例如:
from functools import reduce # List of numbers numbers = [1, 2, 3, 4, 5] # Using reduce with lambda to sum the numbers sum_of_numbers = reduce(lambda x, y: x + y, numbers) print(sum_of_numbers) # Output: 15
说明:在此代码中,我们从 numbers 列表开始。
我们使用 functools 模块中的 Reduce 函数来计算列表中所有数字的总和。我们使用 lambda 函数来定义一个简单的加法运算,该运算接受两个参数 x 和 y,并返回它们的和。Reduce 函数将此 lambda 函数累积应用于列表中的项目,从第一对开始,一直到整个列表,说明如下:
- 最初,x 是列表 (1) 的第一个元素,y 是第二个元素 (2),结果为 3
- 然后这个和 (3) 变成 x,列表中的下一个元素 (3) 变成 y,结果为 6
- 这个过程一直持续到列表中所有元素都已求和。最终结果是 15,表示列表 [1, 2, 3, 4, 5] 中所有数字的总和
其他示例
Lambda 函数还可以用于排序或其他函数式编程环境。
例如:
字符串排序:
cities = ["India", "Germany", "America", "Japan"] sorted_cities = sorted(cities, key=lambda city: city.lower()) print(sorted_cities) # Output: ['America', 'Germany', 'India', 'Japan']
在此代码中,我们有一个名为 cities 的列表,其中包含不同城市的名称。我们使用 sorted 函数按字母顺序对这些城市名称进行排序,忽略大小写。sorted 函数中的关键参数允许我们指定一个函数(在本例中为 lambda 函数)来自定义排序顺序。
lambda 函数 lambda city: city.lower() 在排序之前将每个城市名称转换为小写。这确保排序不区分大小写,以便大小写不同的城市将以相同的方式处理。
排序后,将排序后的列表分配给变量 sorted_cities,然后我们打印结果。输出显示排序后的城市列表:[‘America’, ‘Germany’, ‘India’, ‘Japan’],其中城市按字母顺序排列,忽略字母的大小写。
Lambda 函数用于列表推导
Lambda 函数可用于列表推导中,将函数应用于列表中的每个元素。
例如:
# List of numbers numbers = [1, 2, 3, 4, 5] # Using lambda in list comprehension to square each number squared_numbers = [(lambda x: x ** 2)(x) for x in numbers] print(squared_numbers) # Output: [1, 4, 9, 16, 25]
结论
Python 中的 Lambda 函数提供了一种快速而简洁的方式来创建小型的一次性函数。它们在具有高阶函数(如 map、filter 和 reduce)的函数式编程中特别有用。
虽然 lambda 函数功能强大且简洁,但请确保平衡它们的使用与代码的可读性和可维护性。对于更复杂的逻辑,最好使用 def 定义的常规函数,因为它们支持多个表达式和语句,并且您可以包含文档。
通过理解和有效使用 lambda 函数,我们就可以编写更简洁、更高效的 Python 代码。