Python Lambda表达式详解:特性与map、filter、sorted、reduce实战
本文深入解析Python中Lambda表达式的语法特性与使用场景,涵盖其匿名性、参数传递及命名空间限制。详细演示Lambda如何与map、reduce、sorted和filter等内置函数配合使用,包括具体代码示例与注意事项,帮助开发者掌握Python数据操作的核心技巧。
1 前言
在Java和JavaScript中,lambda箭头函数是极为常见的编程实践,其语法简洁且使用便捷。在python语言体系中,lambda同样具备重要的应用价值。需要注意的是,python关键字在Python中属于保留字,任何包含该关键字的代码结构均被解释器视为lambda匿名函数定义。
其基本语法表现形式如下:
# lambda 是表达式, arg 是用户输入参数 expression 是函数表达式
lambda [arg1 [,arg2,.....argn]]:expression2 lambda 的特性
Python中lambda表达式具备以下核心特性:
- 首先,表达式具有匿名属性。Lambda本质上只是一个表达式,它类似于常规函数但无需显式命名。
- 其次,表达式包含明确的输入与输出。输入部分由arg参数定义,而输出则是该表达式计算后的最终结果。
- 最后,Lambda具有独立的命名空间限制。它只能在当前定义的命名空间内部访问和操作参数变量,无法直接访问外部作用域的非局部变量(除非使用global或nonlocal声明)。
常见的Lambda表达式书写格式如下:
lambda x, y: x + y # 函数输入是x和y,输出是 x + y
lambda *args: sum(args) # 输入是任意个数参数,输出是多个参数的和,输入参数必须是数字
lambda **kwargs: 2 # 输入是任意键值对参数,输出结果为固定值3 lambda 的一些用法
3.1 map 函数
map函数依据提供的函数对可迭代参数进行逐个调用,并返回一个包含结果的可迭代对象。其具体语法结构和使用方式如下所示:
# function 代表为函数,iterable 代表一个可迭代对象,也可以传入多个对象
map(function, iterable, ...)
# 只有一个可迭代参数情况
def cal_num(x):
return x ** 2 + 2 * x - 3
# 准备的数据
read_list = [2, 3, 4]
# 因为map 的结果是一个可迭代对象,所以转换为 list 对象打印结果
re_list = list(map(cal_num, read_list))
#计算的结果 [5, 12, 21]
print(re_list)
# 多个可迭代参数情况,逐个计算和
def cal_add_num(x, y):
return x + y
# 准备的数据
read_list = [2, 3, 4]
re_list = list(map(cal_add_num, read_list, read_list))
# 计算结果 [4, 6, 8]
print(re_list)
# 关于多个迭代的操作,也可以采用 zip 将多个可迭代对象进行处理,组成元组对象,进行循环计算处理。
result_list = []
for k1, k2 in zip(read_list,read_list):
result_list.append(k1 + k2)3.2 reduce 函数
reduce函数用于对参数列表中的元素执行累积计算,最常见的应用场景是对数组求和。此前在Java Stream中介绍的reduce操作与本例逻辑一致,其中的Lambda表达式可视为数列推导的核心逻辑:
# function 代表为函数,iterable 代表一个可迭代对象,initializer 指定起始值
reduce(function, iterable[, initializer])
# 计算数组之和,lambda 写法,起始值为 10, 计算结果为 25
res = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5], 10)需要特别说明的是,在Python 3版本中,reduce函数已从全局命名空间中移除,转而被移至functools模块中。若需使用此功能,必须显式引入from functools import reduce模块。
3.3 sorted 函数
sorted函数旨在对可迭代对象执行排序操作,其语法格式及具体用法如下所示:
# iterable 为可迭代对象 cmp 为比较函数 排序字段和排序顺序
sorted(iterable[, cmp[, key[, reverse]]])
# 1、简单排序
a = [5,7,6,3,4,1,2]
# 使用sorted,保留原列表,不改变列表a的值
# 排序结果为 [1, 2, 3, 4, 5, 6, 7]
b = sorted(a)
# 2、使用 lambda 指定排序函数方式排序
# 待排序对象
x_list = [('b',2),('a',1),('c',3),('d',4)]
# 排序结果:[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
y_list = sorted(x_list, cmp=lambda x,y:cmp(x[1],y[1]))
# 3、利用参数 key 排序,依然使用 lambda 指定元祖的第一个数据
# 计算结果:[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
z_list = sorted(x_list, key=lambda x:x[1])
# 4、指定排序顺序
user_list = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
# 排序结果 [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
re_list = sorted(user_list, key=lambda s: s[2], reverse=True)3.4 filter 函数
filter函数的功能相对直接,主要用于数据过滤。它通过应用指定的表达式,剔除不符合条件的数据,从而返回最终符合条件的结果集。
# function 为过滤函数,返回结果为 true 或者 false, iterable 为可迭代对象
filter(function, iterable)
# 判断是否为奇数
def is_odd(n):
return n % 2 == 1
newlist = filter(is_odd, [1, 2, 3, 4])
print(list(newlist))4 总结
本文主要阐述了Python中Lambda表达式的相关操作,重点在于Lambda表达式与map、filter、sorted以及reduce等高阶函数的配合使用技巧。
到此这篇关于Python数据操作之Lambda表达式详情的文章就介绍到这了。更多相关Python Lambda表达式内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













