匿名函数
匿名函数是使用 lambda关键字来定义的
>>> lambda x: x + 1 定义一个匿名函数,返回的是function类型,说明是一个函数类型
<function <lambda> at 0x7f5b755b4e18>
最简单的匿名函数执行结构
>>> (lambda x: x + 3)(3) 第一对函数用来改变优先级,第二队括号表示函数调用
6
因为匿名函数是没有名字的,因此只有函数体和参数组成,直接使用小括号来将函数体括起来,就可一直执行了(lambda x: x + 3)
函数体后面机上小括号,就是给匿名函数传参(3)
通过赋值的方式来定义匿名函数
>>> f = lambda x:x + 1
>>> f
<function <lambda> at 0x7f5162622e18>
>>> f(1)
2
匿名函数参数详解
没有参数的时候
>>> (lambda :0)()
0
位置参数
>>> (lambda x,y: x+y)(3,5)
8
默认参数
>>> (lambda x,y=3: x+y)(5)
8
关键字参数
>>> (lambda *args:args)(*range(3))
(0, 1, 2)
多个关键字参数
>>> (lambda *args,**kwargs: print(args,kwargs))(*range(3), **{str(x):x for x in range(3)})
(0, 1, 2) {'0': 0, '1': 1, '2': 2}
keyword-only参数
>>> (lambda *,x:x)(x=3)
3
普通函数所支持的参数的变化,匿名函数都支持的
匿名函数常见的使用场景
使用sorted内置方法,对可迭代对象的元素进行排序
>>> from collections import namedtuple
>>> users = [User('lanyulei',18),User('kangjianwei',88)]
>>> sorted(users, key=lambda x:x.age,reverse=True)
[User(name='kangjianwei', age=88), User(name='lanyulei', age=18)]
使用map内置方法,获取可迭代对象中的指定位置元素
>>> list(map(lambda x:x.age,users))
[18, 88]
使用filter内置方法,根据条件查找数据,当前例子为查找年龄超过30岁的
>>> list(filter(lambda x:x.age > 30,users))
[User(name='kangjianwei', age=88)]
匿名函数通常用于高阶函数的参数,当此函数非常短小的时候,就适合使用匿名函数
匿名函数中不能出现if或者for等一些条件判断,循环的语句
匿名函数(lambda表达式),只能写在一行上,所以也有人也叫他单行函数
匿名函数的特点
- 使用lambda来定义的
- 参数列表不需要用括号
- 冒号不是用来开始新语句块的
- 没有return,最后一个表达式的值即返回值