Python中的匿名函数详解(lambda)

Python支持的匿名函数,更多的地方称之为lambda函数。lambda函数在数据分析中使得数据处理非常简洁和方便。

lambda函数由单条语句组成,其结果就是返回值,该函数由关键词lambda定义,表名匿名函数的开始。

下面我们从一个简单的例子开始,说明匿名函数(lambda的简洁性)。假定有10个整数的数组a=[1,2,3,4,5,6,7,8,9,10],求数组a每个数值的平方。定义一个常规函数的话,如下:

python 复制代码
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)
python 复制代码
1
4
9
16
25
36
49
64
81
100

上述功能用匿名函数实现如下:

python 复制代码
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))
python 复制代码
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

可以看到匿名函数lambda要简洁很多。lambda的语法格式:lambda 参数列表:表达式

其中,参数列表可以是多个参数。

(1)一个参数:如 s=lambda x:x**2

python 复制代码
x=int(input('输入一个数字求平方:'))
s=lambda x:x**2
print(s(x))
python 复制代码
输入一个数字求平方:9
81

(2)多个参数:如 s=lambda:x,y:x*y

python 复制代码
x,y=map(int,input('输入两个数字求x的y次方:').split())
s=lambda x,y:x**y
print(s(x,y))
python 复制代码
输入两个数字求x的y次方:3 4
81

(3)匿名函数中加上条件判断: 如 min=lambda x,y:x if x<y else y

python 复制代码
x,y=map(int,input('输入两个数x,y求最小值:').split())
min=lambda x,y:x if x<y else y
print(min(x,y))
python 复制代码
输入两个数x,y求最小值:23 44
23

(4)Lambda 只能访问自身参数,无法直接使用外部变量(需通过参数传递)
(5)lambda与def定义函数的大致比较如下:

特性 Lambda 函数 def 函数
名称 匿名 显式命名
表达式 仅限一个 允许多语句
返回值 自动返回表达式结果 需显式 return
文档字符串 不支持 支持
适用场景 简单逻辑 复杂逻辑
外部变量 不能使用(需传递) 可以使用