Python 中的匿名函数

匿名也就是没有名字,函数为什么要匿名呢?

有没有感觉每次为函数取名都是件很悲剧的事情,想取个像样点的函数名很抠脑壳。

如果某个函数我们只需要使用一次的时候,还需要取名是不是就更悲剧了?

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]]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章