在本教程中,我们将学习匿名函数,通常称为 Lambda 函数。我们将了解它们是什么,如何执行它们以及它们的语法。

什么是 Python 中的 Lambda 函数?

Python 中的 Lambda 函数是匿名函数,意味着它们没有名称。我们已经知道,使用 def 关键字可以创建一个常规函数。在 Python 中,我们还可以使用 lambda 关键字来定义一个没有名称的函数。

Python Lambda 函数的语法

  1. 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]

标签: Tkinter教程, Tkinter安装, Tkinter库, Tkinter入门, Tkinter学习, Tkinter入门教程, Tkinter, Tkinter进阶, Tkinter指南, Tkinter学习指南, Tkinter进阶教程, Tkinter编程