Python中的匿名函数详解(lambda)
Python支持的匿名函数,更多的地方称之为lambda函数。lambda函数在数据分析中使得数据处理非常简洁和方便。
lambda函数由单条语句组成,其结果就是返回值,该函数由关键词lambda定义,表名匿名函数的开始。
下面我们从一个简单的例子开始,说明匿名函数(lambda的简洁性)。假定有10个整数的数组a=[1,2,3,4,5,6,7,8,9,10],求数组a每个数值的平方。定义一个常规函数的话,如下:
a=[1,2,3,4,5,6,7,8,9,10] def fuc_s(a):for i in a:print(i**2) fuc_s(a)
1 4 9 16 25 36 49 64 81 100
上述功能用匿名函数实现如下:
a=[1,2,3,4,5,6,7,8,9,10] func_a=lambda x:x**2 print(list(func_a(i) for i in a))
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
可以看到匿名函数lambda要简洁很多。lambda的语法格式:lambda 参数列表:表达式
其中,参数列表可以是多个参数。
(1)一个参数:如 s=lambda x:x**2
x=int(input('输入一个数字求平方:')) s=lambda x:x**2 print(s(x))
输入一个数字求平方:9 81
(2)多个参数:如 s=lambda:x,y:x*y
x,y=map(int,input('输入两个数字求x的y次方:').split()) s=lambda x,y:x**y print(s(x,y))
输入两个数字求x的y次方:3 4 81
(3)匿名函数中加上条件判断: 如 min=lambda x,y:x if x<y else y
x,y=map(int,input('输入两个数x,y求最小值:').split()) min=lambda x,y:x if x<y else y print(min(x,y))
输入两个数x,y求最小值:23 44 23
(4)Lambda 只能访问自身参数,无法直接使用外部变量(需通过参数传递)
(5)lambda与def定义函数的大致比较如下:
特性 | Lambda 函数 | def 函数 |
---|---|---|
名称 | 匿名 | 显式命名 |
表达式 | 仅限一个 | 允许多语句 |
返回值 | 自动返回表达式结果 | 需显式 return |
文档字符串 | 不支持 | 支持 |
适用场景 | 简单逻辑 | 复杂逻辑 |
外部变量 | 不能使用(需传递) | 可以使用 |