Python的关键字lambad是定义匿名函数用的....什么是匿名函数?就是不需函数名的函数。和def有什么区别呢?
- python lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量。
- python lambda它只是一个表达式,而def则是一个语句。
先定义一个普通函数:
>>> def add(x):
return x*2
>>> add(1)
2
>>> add(5)
10
定义一个普通函数,主要作用就是将传入的值乘以2并返回。现在来改成匿名函数
>>> lambda x: x*2
<function __main__.<lambda>>
上面的示例,仅仅是定义了一个匿名函数,语法是lambda 参数 : 操作
。
- 示例代码中参数是一个,但是参数可以很多个
- 操作只有一条。x*2,不需要return会自己返回
还有一点,匿名函数创建好不会赋给参数,所以定义了之后需要使用,最好是传给一个标示符参数,如下:
>>> lam = lambda x: x*x
>>> lam
<function __main__.<lambda>>
>>> lam(10)
100
>>> lam(4)
16
>>> lamadd = lambda x,y:x+y
>>> lamadd(1,2)
3
>>> lamadd(100,99)
199
既然定义必须赋给一个变量才可以使用,匿名函数+标示符 类似于 def定义的函数,那匿名的存在有什么意义?
既然这里提到 lambda 匿名函数,就必须提及高阶函数
高阶函数
首先明确一点,匿名函数定义传给一个变量,变量后面跟上括号并放入值,就可以得到函数操作,这就表明变量可以指向函数,这点很重要,理解这点之后,学习高阶函数就会有比较清晰的思路
同样的先来个示例学习一下什么叫高阶函数:
>>> f2 = lambda x:x*x
>>> def newadd(x,y,f):
return f(x)+f(y)
>>> newadd(1, 2, f2)
5
>>> newadd( 3, 7, f2)
58
定义一个匿名函数并赋值给f2,并定义一个普通函数,参数是三个,x、y和一个 f 的函数。
由于前面提及的一个点:变量可以指向函数,所以f = f2 = lambda
-> f(x) = f2(2) = 2*2 = 4
高阶函数的理解就是这样【只可意会不可言传】。理解这一点很重要,趁热继续学习python的内置高阶函数
Python内置高阶函数
map函数
map()函数接收两个参数,一个是函数名,另一个是可遍历的对象【如列表、字符串】,返回一个map类型。示例代码如下:
>>> ks1 = [1,2,3,4,5,6,7,8,9]
>>> ku = map(lambda x: x+1, ks1)
>>> type(ku)
map
>>> list(ku)
[2, 3, 4, 5, 6, 7, 8, 9, 10]
示例代码中,可以直接使用匿名函数,简洁明了
【高阶函数未完】
更多Python3教程--传送门