Python Lambda 函数是匿名函数,意味着该函数没有名称。我们已经知道,def关键字用于在 Python 中定义普通函数。类似地,Python中的lambda关键字用于定义匿名函数。
Python Lambda 函数语法
语法: lambda 参数:表达式
- 该函数可以有任意数量的参数,但只能有一个表达式,该表达式将被计算并返回。
- 只要需要函数对象,就可以自由使用 lambda 函数。
- 您需要记住,lambda 函数在语法上仅限于单个表达式。
- 除了函数中的其他类型的表达式之外,它在特定的编程领域还有多种用途。
Python Lambda 函数示例
在示例中,我们定义了一个 lambda 函数(upper ),使用upper()将字符串转换为大写。
str1 = 'JkhxwforGeeks'
upper = lambda string: string.upper()
print(upper(str1))
输出:
JKHXWFORGEEKS
Python 中 Lambda 函数的使用
让我们看看 Python lambda 函数的一些实际用途。
使用 Python lambda 函数进行条件检查
这里,format_numric调用lambda函数,并将num作为参数传递来执行操作。
format_numeric = lambda num: f"{num:e}" if isinstance(num, int) else f"{num:,.2f}"
print("Int formatting:", format_numeric(1000000))
print("float formatting:", format_numeric(999999.789541235))
输出:
Int formatting: 1.000000e+06
float formatting: 999,999.79
Lambda函数和def定义函数之间的区别
def cube(y):
return y*y*y
lambda_cube = lambda y: y*y*y
# using function defined
# using def keyword
print("Using function defined with `def` keyword, cube:", cube(5))
# using the lambda function
print("Using lambda function, cube:", lambda_cube(5))
输出:
Using function defined with `def` keyword, cube: 125
Using lambda function, cube: 125
正如我们在上面的示例中看到的,cube()函数和lambda_cube()函数的行为相同且符合预期。让我们进一步分析一下上面的例子:
具有 lambda 函数 | 没有 lambda 函数 |
---|---|
支持返回某些值的单行有时语句。 | 支持功能块内任意数量的行 |
适合执行简短的操作/数据操作。 | 适合任何需要多行代码的情况。 |
使用 lambda 函数有时会降低代码的可读性。 | 我们可以使用注释和功能描述来方便阅读。 |
Python lambda 函数的实际用途
具有列表理解功能的 Python Lambda 函数
这段代码创建了一个名为 is_even_list 的列表,其中包含了四个 lambda 函数。这些 lambda 函数用于将每个 x 值乘以 10,其中 x 的值在范围从 1 到 4。 然后,代码使用 for 循环迭代 is_even_list 中的每个 lambda 函数,并调用它们以获取计算后的值。
is_even_list = [lambda arg=x: arg * 10 for x in range(1, 5)]
# 迭代每个 lambda 函数并调用它们以获取计算后的值
for item in is_even_list:
print(item())
输出:
10
20
30
40
Python Lambda 函数与 if-else
在这里,我们使用Max lambda 函数来查找两个整数中的最大值。
# Example of lambda function using if-else
Max = lambda a, b : a if(a > b) else b
print(Max(1, 2))
输出:
2
这是一个使用 lambda 函数和条件表达式的示例。这个 lambda 函数被命名为 Max,它接受两个参数 a 和 b,然后返回 a 如果 a 大于 b,否则返回 b。
具有多个语句的 Python Lambda
Lambda 函数不允许多个语句,但是,我们可以创建两个 lambda 函数,然后调用另一个 lambda 函数作为第一个函数的参数。让我们尝试使用 lambda 查找第二个最大元素。
List = [[2,3,4],[1, 4, 16, 64],[3, 6, 9, 12]]
# 对每个子列表进行排序
sortList = lambda x: (sorted(i) for i in x)
# 获取第二大的元素
secondLargest = lambda x, f : [y[len(y)-2] for y in f(x)]
res = secondLargest(List, sortList)
print(res)
输出:
[3, 16, 9]
上面的这段代码首先定义了一个名为 List 的列表,其中包含了三个子列表。接下来,代码定义了两个 lambda 函数:
- sortList 函数用于对输入的列表中的每个子列表进行排序。
- secondLargest 函数用于查找每个子列表中的第二大元素。
然后,代码调用 secondLargest 函数,并将 List 和 sortList 作为参数传递。最后,结果存储在变量 res
中,并打印出来。
将 lambda() 函数与 filter() 一起使用
Python 中的 filter() 函数接受一个函数和一个列表作为参数。这提供了一种优雅的方式来过滤掉序列“sequence”中的所有元素,函数返回 True。这是一个从输入列表中返回奇数的小程序:
使用filter()和lambda函数过滤掉所有奇数
此处,如果 x 不为偶数,则 lambda x: (x % 2 != 0) 返回 True 或 False。由于 filter() 只保留生成True 的元素,因此它会删除生成False的所有奇数。
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]
使用 lambda 和 filter() 函数过滤所有年龄超过 18 岁的人
# 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 修改项。例子:
使用 lambda 和 map() 函数将列表的所有元素乘以 2
# 原始列表
li = [5, 7, 22, 97, 54, 62, 77, 23, 73, 61]
# 使用 map() 和 lambda 表达式计算每个元素的两倍值
final_list = list(map(lambda x: x*2, li))
# 打印结果列表
print(final_list)
输出:
[10、14、44、194、108、124、154、46、146、122]
使用 lambda 和 map() 函数将列表的所有元素转换为大写
# 原始动物名称列表
animals = ['dog', 'cat', 'parrot', 'rabbit']
# 使用 map() 函数和 lambda 表达式将动物名称转换为大写字母
uppered_animals = list(map(lambda animal: animal.upper(), animals))
# 打印结果列表
print(uppered_animals)
输出:
['DOG', 'CAT', 'PARROT', 'RABBIT']
将 lambda() 函数与 reduce() 一起使用
Python 中的reduce ()函数接受一个函数和一个列表作为参数。使用 lambda 函数调用该函数并返回一个可迭代的新结果。这对可迭代对象对执行重复操作。reduce() 函数属于functools模块。
使用 lambda 和 reduce() 函数求列表中所有元素的总和
from functools import reduce
# 原始整数列表
li = [5, 8, 10, 20, 50, 100]
# 使用 reduce() 函数和 lambda 表达式计算列表中所有元素的总和
sum = reduce((lambda x, y: x + y), li)
# 打印总和
print(sum)
输出:
193
这里前两个元素的结果被添加到下一个元素,这样一直持续到列表末尾,如 (((((5+8)+10)+20)+50)+100)。
使用 lambda 和 reduce() 函数查找列表中的最大元素
# 导入 functools 以使用 reduce() 函数
import functools
# 初始化列表
lis = [1, 3, 5, 6, 2]
# 使用 reduce() 函数和 lambda 表达式计算列表中的最大元素
max_element = functools.reduce(lambda a, b: a if a > b else b, lis)
# 打印最大元素
print("列表中的最大元素是:", max_element)
输出:
列表中的最大元素是: 6