匿名函数是指没有名字的函数。有些时候,一些函数仅在特定环境下使用有限次,我们甚至懒得去给这种函数起一个名字,这时可使用匿名函数。在 Python 中,可使用 lambda 表达式创建小巧的匿名函数,其一般形式为:
lambda arg1, arg2,..., argN: expression using arguments
由 lambda 表达式所返回的函数对象与由 def 创建并赋值的函数对象工作起来是完全一样的。不过他们也有不同之处:
lambda表达式是一个表达式,不是语句,它能出现在不允许def语句出现的地方;lambda表达式的主体是一个单独的表达式,不是一个代码块,不能像def语句那样函数体内部可以包含多个语句,连简单的if语句也不能出现,它更像return语句后面所跟的表达式。
以下的函数和 lambda 表达式的功能是相同的:
def add1(a, b):
return a + b
add2 = lambda a, b: a + b
print(add1(3, 6)) # 9
print(add2(3, 6)) # 9
又如,列表类型的 sort 方法可以对列表进行原地排序,其签名为:
sort(*, key=None, reverse=False)
其中的 key 指定带有一个参数的函数,用于从每个列表元素中提取比较键(例如 key=str.lower)。对应于列表中每一项的键会被计算一次,然后在整个排序过程中使用。默认值 None 表示直接对列表项排序而不计算一个单独的键值。下面代码为 key 指定一个 lambda,实现按照列表中的成绩从高到低的顺序排序:
scores = [('张三', 87.5), ('李四', 79.0), ('王老五', 84.0)]
scores.sort(key=lambda score: score[1], reverse=True)
print(scores) # [('张三', 87.5), ('王老五', 84.0), ('李四', 79.0)]