Python Lambda 函数
Python Lambda 函数是匿名函数意味着该函数没有名称。我们已经知道def关键字用于定义Python中的普通函数。同样, lambda关键字用于在Python中定义匿名函数。
Python Lambda函数语法:
lambda arguments: expression
- 这个函数可以有任意数量的参数,但只有一个表达式,它被计算并返回。
- 一种是在需要函数对象的地方免费使用 lambda 函数。
- 您需要了解 lambda 函数在语法上仅限于单个表达式。
- 除了函数中的其他类型的表达式之外,它在特定的编程领域有各种用途。
示例:Lambda函数示例
Python3
# Python program to demonstrate
# lambda functions
string ='GeeksforGeeks'
# lambda returns a function object
print(lambda string : string)
Python3
# Python program to demonstrate
# lambda functions
x ="GeeksforGeeks"
# lambda gets pass to print
(lambda x : print(x))(x)
Python
# Python code to illustrate cube of a number
# showing difference between def() and lambda().
def cube(y):
return y*y*y
lambda_cube = lambda y: y*y*y
# using the normally
# defined function
print(cube(5))
# using the lambda function
print(lambda_cube(5))
Python3
tables = [lambda x=x: x*10 for x in range(1, 11)]
for table in tables:
print(table())
Python3
# Example of lambda function using if-else
Max = lambda a, b : a if(a > b) else b
print(Max(1, 2))
Python3
List = [[2,3,4],[1, 4, 16, 64],[3, 6, 9, 12]]
# Sort each sublist
sortList = lambda x: (sorted(i) for i in x)
# Get the second largest element
secondLargest = lambda x, f : [y[len(y)-2] for y in f(x)]
res = secondLargest(List, sortList)
print(res)
Python
# Python code to illustrate
# filter() with lambda()
li = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61]
final_list = list(filter(lambda x: (x%2 != 0) , li))
print(final_list)
Python3
# Python 3 code to people above 18 yrs
ages = [13, 90, 17, 59, 21, 60, 5]
adults = list(filter(lambda age: age>18, ages))
print(adults)
Python
# Python code to illustrate
# map() with lambda()
# to get double of a list.
li = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61]
final_list = list(map(lambda x: x*2, li))
print(final_list)
Python3
# Python program to demonstrate
# use of lambda() function
# with map() function
animals = ['dog', 'cat', 'parrot', 'rabbit']
# here we intend to change all animal names
# to upper case and return the same
uppered_animals = list(map(lambda animal: str.upper(animal), animals))
print(uppered_animals)
Python
# Python code to illustrate
# reduce() with lambda()
# to get sum of a list
from functools import reduce
li = [5, 8, 10, 20, 50, 100]
sum = reduce((lambda x, y: x + y), li)
print (sum)
Python3
# python code to demonstrate working of reduce()
# with a lambda function
# importing functools for reduce()
import functools
# initializing list
lis = [ 1 , 3, 5, 6, 2, ]
# using reduce to compute maximum element from list
print ("The maximum element of the list is : ",end="")
print (functools.reduce(lambda a,b : a if a > b else b,lis))
at 0x7f65e6bbce18>
在上面的示例中,打印函数没有调用 lambda,而是简单地返回函数对象和存储它的内存位置。
所以,为了让 print 首先打印字符串,我们需要调用 lambda 以便字符串通过 print。
例子:
Python3
# Python program to demonstrate
# lambda functions
x ="GeeksforGeeks"
# lambda gets pass to print
(lambda x : print(x))(x)
GeeksforGeeks
Lambda函数和def定义函数的区别
让我们看一下这个例子,并尝试理解普通的 def 定义函数和 lambda函数之间的区别。这是一个返回给定值的立方体的程序:
Python
# Python code to illustrate cube of a number
# showing difference between def() and lambda().
def cube(y):
return y*y*y
lambda_cube = lambda y: y*y*y
# using the normally
# defined function
print(cube(5))
# using the lambda function
print(lambda_cube(5))
输出:
125
125
正如我们在上面的示例中看到的那样,cube()函数和 lambda_cube()函数的行为相同且符合预期。让我们再分析一下上面的例子:
- 不使用 Lambda:在这里,它们都返回给定数字的立方体。但是,在使用 def 时,我们需要定义一个名为 cube 的函数,并且需要向它传递一个值。执行后,我们还需要使用return关键字从调用函数的位置返回结果。
- 使用 Lambda: Lambda 定义不包含“return”语句,它始终包含返回的表达式。我们还可以将 lambda 定义放在任何需要函数的地方,我们根本不必将它分配给变量。这就是 lambda 函数的简单性。
让我们看一些更常用的 lambda 函数示例。
示例 1:具有列表理解的Python Lambda函数
在这个例子中,我们将使用带有列表理解的 lambda函数和带有 for 循环的 lambda。我们将尝试打印 10 人的表格。
Python3
tables = [lambda x=x: x*10 for x in range(1, 11)]
for table in tables:
print(table())
10
20
30
40
50
60
70
80
90
100
示例 2:带有 if-else 的Python Lambda函数
Python3
# Example of lambda function using if-else
Max = lambda a, b : a if(a > b) else b
print(Max(1, 2))
2
示例 3:具有多个语句的Python Lambda
Lambda 函数不允许多个语句,但是,我们可以创建两个 lambda 函数,然后调用另一个 lambda函数作为第一个函数的参数。让我们尝试使用 lambda 找到第二个最大元素。
Python3
List = [[2,3,4],[1, 4, 16, 64],[3, 6, 9, 12]]
# Sort each sublist
sortList = lambda x: (sorted(i) for i in x)
# Get the second largest element
secondLargest = lambda x, f : [y[len(y)-2] for y in f(x)]
res = secondLargest(List, sortList)
print(res)
[3, 16, 9]
在上面的示例中,我们创建了一个 lambda函数,用于对给定列表的每个子列表进行排序。然后将该列表作为参数传递给第二个 lambda函数,该函数返回排序列表中的 n-2 个元素,其中 n 是子列表的长度。
Lambda 函数可以与 filter()、map() 和 reduce() 等内置函数一起使用。
将 lambda()函数与 filter() 一起使用
Python中的 filter()函数接受一个函数和一个列表作为参数。这提供了一种优雅的方式来过滤掉序列“sequence”的所有元素,函数返回True。这是一个从输入列表中返回奇数的小程序:
示例 1:
Python
# Python code to illustrate
# filter() with lambda()
li = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61]
final_list = list(filter(lambda x: (x%2 != 0) , li))
print(final_list)
输出:
[5, 7, 97, 77, 23, 73, 61]
示例 2:
Python3
# Python 3 code to people above 18 yrs
ages = [13, 90, 17, 59, 21, 60, 5]
adults = list(filter(lambda age: age>18, ages))
print(adults)
输出:
[90, 59, 21, 60]
将 lambda()函数与 map() 一起使用
Python中的 map()函数接受一个函数和一个列表作为参数。使用 lambda函数和一个列表调用该函数,并返回一个新列表,其中包含该函数为每个项目返回的所有 lambda 修改项。例子:
示例 1:
Python
# Python code to illustrate
# map() with lambda()
# to get double of a list.
li = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61]
final_list = list(map(lambda x: x*2, li))
print(final_list)
输出:
[10, 14, 44, 194, 108, 124, 154, 46, 146, 122]
示例 2:
Python3
# Python program to demonstrate
# use of lambda() function
# with map() function
animals = ['dog', 'cat', 'parrot', 'rabbit']
# here we intend to change all animal names
# to upper case and return the same
uppered_animals = list(map(lambda animal: str.upper(animal), animals))
print(uppered_animals)
输出:
['DOG', 'CAT', 'PARROT', 'RABBIT']
将 lambda()函数与 reduce() 一起使用
Python中的 reduce()函数接受一个函数和一个列表作为参数。该函数使用 lambda函数和一个可迭代的函数调用,并返回一个新的缩减结果。这对可迭代的对执行重复操作。 reduce()函数属于functools模块。
示例 1:
Python
# Python code to illustrate
# reduce() with lambda()
# to get sum of a list
from functools import reduce
li = [5, 8, 10, 20, 50, 100]
sum = reduce((lambda x, y: x + y), li)
print (sum)
输出:
193
在这里,前两个元素的结果被添加到下一个元素,并一直持续到列表的末尾,如 (((((5+8)+10)+20)+50)+100)。
示例 2:
Python3
# python code to demonstrate working of reduce()
# with a lambda function
# importing functools for reduce()
import functools
# initializing list
lis = [ 1 , 3, 5, 6, 2, ]
# using reduce to compute maximum element from list
print ("The maximum element of the list is : ",end="")
print (functools.reduce(lambda a,b : a if a > b else b,lis))
输出:
The maximum element of the list is : 6