1. 主页
  2. Python基础到高级
  3. 函数
  4. lambda

lambda

匿名函数

匿名函数是使用 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,最后一个表达式的值即返回值

我们要如何帮助您?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注