Python教程-Python Lambda 函数

在本教程中,我们将学习匿名函数,通常称为 Lambda 函数。我们将了解它们是什么,如何执行它们以及它们的语法。
什么是 Python 中的 Lambda 函数?
Python 中的 Lambda 函数是匿名函数,意味着它们没有名称。我们已经知道,使用 def 关键字可以创建一个常规函数。在 Python 中,我们还可以使用 lambda 关键字来定义一个没有名称的函数。
Python Lambda 函数的语法
- lambda 参数: 表达式
这个函数接受任意数量的输入,但只计算并返回一个表达式的结果。
Lambda 函数可以在需要函数参数的任何地方使用。除了在函数的其他形式中,它在某些编程领域有各种应用。需要记住的是,根据语法,Lambda 函数限制在一个单独的语句内。
Python Lambda 函数示例
下面是一个 Lambda 函数的示例,该函数将数字加 4。
代码
# Code to demonstrate how we can use a lambda function
add = lambda num: num + 4
print( add(6) )
输出:
10
在上述程序中,Lambda 函数是 "lambda num: num+4"。参数是 num,计算和返回的表达式是 num * 4。
这个函数没有标签。它生成一个与 "add" 标识符关联的函数对象。现在我们可以将其视为普通函数。Lambda 语句 "lambda num: num+4" 几乎与以下内容相同:
代码
def add( num ):
return num + 4
print( add(6) )
输出:
10
Lambda 函数与 Def 函数的区别是什么?
让我们看看这个示例,以了解传统的使用 def 关键字定义的函数与使用 lambda 关键字定义的函数之间的区别。此程序计算给定数字的倒数:
代码
# Python code to show the reciprocal of the given number to highlight the difference between def() and lambda().
def reciprocal( num ):
return 1 / num
lambda_reciprocal = lambda num: 1 / num
# using the function defined by def keyword
print( "Def keyword: ", reciprocal(6) )
# using the function defined by lambda keyword
print( "Lambda keyword: ", lambda_reciprocal(6) )
输出:
Def keyword: 0.16666666666666666
Lambda keyword: 0.16666666666666666
在上述情况下,reciprocal() 和 lambda_reciprocal() 函数表现相同,并且如预期那样工作。让我们仔细看一下上面的示例:
这两个函数都返回给定数字的倒数,而不使用 Lambda。然而,使用 def 时,我们需要声明一个名为 reciprocal 的函数,并在执行 def 时将一个数字传递给它。我们还需要使用 return 关键字,在函数执行后从任何地方提供输出。
使用 Lambda:Lambda 定义总是包含一个输出的语句,而不是 "return" 语句。Lambda 函数的优点是它们的便利性。我们不需要将 lambda 表达式分配给一个变量,因为我们可以在需要函数的任何地方放置它。
使用 Lambda 函数与 filter()
filter() 方法在 Python 中接受两个参数:一个函数和一个可迭代对象,比如列表。
对于列表中的每个项目都会调用该函数,并返回一个新的可迭代对象或列表,其中只包含那些在应用于该函数时返回 True 的元素。
以下是使用 filter() 方法仅从列表中返回奇数的简单示例。
代码
# Code to filter odd numbers from a given list
list_ = [34, 12, 64, 55, 75, 13, 63]
odd_list = list(filter( lambda num: (num % 2 != 0) , list_ ))
print(odd_list)
输出:
[55, 75, 13, 63]
使用 Lambda 函数与 map()
Python 的 map() 函数接受一个方法和一个列表。
对于列表中的所有元素,该函数都会执行,并生成一个新的列表,其中包含每个项目由给定函数生成的元素。
以下是使用 map() 方法计算列表中所有条目的平方的示例。
代码
#Code to calculate the square of each number of a list using the map() function
numbers_list = [2, 4, 5, 1, 3, 7, 8, 9, 10]
squared_list = list(map( lambda num: num ** 2 , numbers_list ))
print( squared_list )
输出:
[4, 16, 25, 1, 9, 49, 64, 81, 100]
使用 Lambda 函数与列表推导式
在这个示例中,我们将 lambda 函数与列表推导式和 for 循环结合使用。我们将尝试打印范围在 0 到 11 之间数字的平方。
代码
#Code to calculate square of each number of list using list comprehension
squares = [lambda num = num: num ** 2 for num in range(0, 11)]
for square in squares:
print( square(), end = " ")
输出:
0 1 4 9 16 25 36 49 64 81 100
使用 Lambda 函数与 if-else
我们将使用 Lambda 函数与 if-else 块。
代码
# Code to use lambda function with if-else
Minimum = lambda x, y : x if (x < y) else y
print(Minimum( 35, 74 ))
输出:
35
使用 Lambda 函数与多个语句
Lambda 函数不允许多个表达式,但我们可以构建 2 个或更多的 lambda 函数,然后将第二个 lambda 表达式作为参数传递给第一个。让我们使用 lambda 查找第三大的元素。
代码
# Code to print the third-largest number of the given list using the lambda function
my_List = [ [3, 5, 8, 6], [23, 54, 12, 87], [1, 2, 4, 12, 5] ]
# sorting every sublist of the above list
sort_List = lambda num : ( sorted(n) for n in num )
# Getting the third largest number of the sublist
third_Largest = lambda num, func : [ l[ len(l) - 2] for l in func(num)]
result = third_Largest( my_List, sort_List)
print( result )
输出:
[6, 54, 5]