天天看点

Python - lambda 表达式

好像很多地方都会看到这样一句话

Python 创始人也说过,所有的对象都是第一类对象

在上面中所说的第一类对象,其实是指函数作为一个对象,与其它对象具有相同的地位

具体来说,数值可以被赋值给变量、作为参数传递给函数、作为返回值

因为函数和数值具有相同的地位,所以函数也可以被赋值给变量、作为参数传递给函数、作为返回值

可以将数值、字符串、列表、字典类型的对象赋值给变量

可以将数值、字符串、列表、字典类型的对象作为参数传递给函数

可以将数值、字符串、列表、字典类型的对象作为函数的返回值

将函数作为第一类对象,函数具有和数值、字符串、列表、字典等类型的对象具有相同的地位

将函数作为第一类对象,是一种重要的抽象机制,极大的提升了程序的灵活性

存在一个列表 [1, -1, 2, -2, 3, -3]

打印输出列表中的正数

打印输出列表中的负数

代码结构完全相同,只是条件判断不同

在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便

Python 提供了 lambda 表达式对匿名函数提供支持

expression 只允许是一条表达式,所以使用很受限  

等价函数写法

使用 Python 内置的 map 函数时,通常会用到 lambda 表达式 

map 函数接收两个参数 function 和 list

function 是一个函数,list 是一个可以被遍历的序列

map 将传入的函数依次作用到序列的每个元素,并把结果作为新的序列返回

图的左边是一个序列 list,包含 3 个元素 1、2、3

调用函数 map 时,需要提供一个函数 y = f (x),函数 f 将输入 x 映射为输出 y

将函数 f 对图的左边的序列中的每个元素依次作用,得到图的右边的序列

图的右边是一个序列 list,包含 3 个元素 f (1)、f (2)、f (3)

将 lambda 表达式赋值给一个变量

这样调用这个变量,相当于调用了一个函数

filter(function, iterable):用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表

sorted(iterable, cmp=None, key=None, reverse=False):对所有可迭代的对象进行排序操作

map(function, iterable, ...):根据提供的函数对指定序列做映射

reduce(function, iterable[, initializer]):会对参数序列中元素进行累积

后面再详说这些函数

lambda 表达式常用场景:当某些功能代码只用一次的时候,可以用 lambda 代替