📜  Python Lambda 函数

📅  最后修改于: 2022-05-13 01:55:11.222000             🧑  作者: Mango

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