匿名也就是没有名字,函数为什么要匿名呢?
有没有感觉每次为函数取名都是件很悲剧的事情,想取个像样点的函数名很抠脑壳。
如果某个函数我们只需要使用一次的时候,还需要取名是不是就更悲剧了?
Python 与 JavaScript 支持函数本身作为另外函数的参数传入。这就导致了 Python 中有很多地方高阶函数在使用时,需要传入一个函数。这种时候,函数只在调用高阶函数的时候使用一次。
Python 对匿名函数属于有限支持:
- 匿名函数以
lambda
关键字标识 - 匿名函数是一个表达式而不是语句块,所以只能写成一条语句
- 匿名函数不能写 return 语句,整个 lambda 表达式的结果就是返回值
综上,匿名函数可以实现的逻辑是相对有限的。
匿名函数 lambda 表达式的写法:lambda 参数: 返回值
比如:
lambda x: x+1
x
是参数, x+1
是其返回值。相当于:
def f(x):
return x+1
如果多个参数,用逗号分隔参数:
lambda x,y: x+y
# == 相当于 ==
def f(x, y):
return x+y
lambda 表达式运行结果是一个函数对象(类似<function <lambda> at 0x00...0>
),只能使用一次,当然你也可以用变量存下来一直使用:
fn = lambda x,y: x+y
print(fn(3, 4))
## 7
常规使用呢,比如我们要对这样一个列表[['y', 2], ['z', 1], ['x', 0]]
基于每个子列表的第二个元素(数字)排序。我们一般列表排序,直接调用列表的 sort()
方法即可,sort() 方法的 key
参数可以接收一个函数,并基于函数的返回值进行排序。
:
>>> l = [['y', 2], ['z', 1], ['x', 0]]
>>> l.sort(key=lambda x:x[1]) # => 为key传递匿名函数
>>> l
## [['x', 0], ['z', 1], ['y', 2]]