Python匿名函数lambda

布啦豆 6240

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

lambda定义和使用

既然定义必须赋给一个变量才可以使用,匿名函数+标示符 类似于 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]

示例代码中,可以直接使用匿名函数,简洁明了

高阶函数map

待更新

版权声明:允许转载,转载请注明出处 —— 《Python3教程》: Python匿名函数lambda

Copyright @2016-2017 | 赣ICP备16003025号