拉姆达
尝试了解普通的 def 定义函数和 lambda 函数之间的区别。这是一个返回给定值的立方体的程序:
# 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 lamda function
print(lambda_cube(5))
输出:
125
125
不使用 Lambda:
- 在这里,它们都返回给定数字的立方体。但是,在使用 def 时,我们需要定义一个名为 cube 的函数,并且需要向它传递一个值。执行后,我们还需要使用 return 关键字从调用函数的位置返回结果。
使用 Lambda:
- Lambda 定义不包含“return”语句,它总是包含一个返回的表达式。我们还可以将 lambda 定义放在任何需要函数的地方,我们根本不必将它分配给变量。这就是 lambda 函数的简单性。
Lambda 函数可以与内置函数一起使用,例如filter()
,map()
和reduce()
.
lambda() 和 filter()
Python 中的filter()
函数接受一个函数和一个列表作为参数。这提供了一种优雅的方式来过滤掉序列“sequence”的所有元素,函数为其返回True
.
my_list = [1, 5, 4, 6, 8, 11, 3, 12]
new_list = list(filter(lambda x: (x%2 == 0) , my_list))
print(new_list)
ages = [13, 90, 17, 59, 21, 60, 5]
adults = list(filter(lambda age: age>18, ages))
print(adults) # above 18 yrs
输出:
[4, 6, 8, 12]
[90, 59, 21, 60]
lambda() 与 map()
Python 中的map()
函数接受一个函数和一个列表作为参数。使用 lambda 函数和一个列表调用该函数,并返回一个新列表,其中包含该函数为每个项目返回的所有 lambda 修改项。
my_list = [1, 5, 4, 6, 8, 11, 3, 12]
new_list = list(map(lambda x: x * 2 , my_list))
print(new_list)
cities = ['novi sad', 'ljubljana', 'london', 'new york', 'paris']
# change all city names
# to upper case and return the same
uppered_cities = list(map(lambda city: str.upper(city), cities))
print(uppered_cities)
输出:
[2, 10, 8, 12, 16, 22, 6, 24]
['NOVI SAD', 'LJUBLJANA', 'LONDON', 'NEW YORK', 'PARIS']
减少
reduce()
map()
与和的工作方式不同filter()
。它不会根据function
我们传递的和迭代返回一个新列表。相反,它返回一个值。
此外,在 Python 3reduce()
中不再是内置函数,它可以在functools
模块中找到。
语法是:
reduce(function, sequence[, initial])
reduce()
通过调用function
我们为序列中的前两项传递的来工作。返回的结果与下一个(在本例中为第三个)元素一起function
用于另一个调用中。function
如果存在可选参数initial
,则在此“循环”的开头使用第一次调用中的第一个元素function
。在某种程度上,该initial
元素是第一个元素之前的第 0 个元素(如果提供)。
lambda() 和 reduce()
Python 中的 reduce() 函数接受一个函数和一个列表作为参数。该函数使用 lambda 函数和一个可迭代的函数调用,并返回一个新的缩减结果。这对可迭代的对执行重复操作。
from functools import reduce
my_list = [1, 1, 2, 3, 5, 8, 13, 21, 34]
sum = reduce((lambda x, y: x + y), my_list)
print(sum) # sum of a list
print("With an initial value: " + str(reduce(lambda x, y: x + y, my_list, 100)))
88
With an initial value: 188
这些函数是便利函数。它们在那里,因此您可以避免编写更繁琐的代码,但避免过多地使用它们和 lambda 表达式,因为“你可以”,因为它通常会导致难以维护的难以辨认的代码。仅当您在查看函数或 lambda 表达式时绝对清楚发生了什么时才使用它们。