好像很多地方都会看到这样一句话
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 代替