python细节之——lambda

来源:互联网 发布:后二计算软件 编辑:程序博客网 时间:2024/05/21 15:13

写在前面的话:犹记得实习面试的时候面试官问我会用python吗,我说会一点,然后面试官说那你说下lambda吧,我:???,当年为了写一个算法奉行拿来主义,半懂不懂得就把python拿来用了,根本没想过深入去学。现在接触了一点用python写脚本,就把lambda做个整理吧~

在此之前,先看个例子来理解一下,对于if else语句,可以使用三元运算来简化其表示:

这里写图片描述

注:python 2.x中可以直接print sex,但是python 3.x需要加括号

同样,lambda是一个表达式,定义了一个匿名函数。直白一点说也可以把它理解成一种简化的函数的表示方式,先来看一个最简单的例子

这里写图片描述

从上可以看出,lambda的主体是一个表达式,x为入口参数(即C/C++里常说的形参),x*2为函数体,y相当于函数的返回值,用函数来书写即为:

def y(x):    return x*2

与函数相同,它的入口参数可以为多个,如:

这里写图片描述

不仅如此,lambda表达式也可以进行嵌套:

这里写图片描述

其中,f(3)令y=3,返回f1=(x+3)*4,f1(4)令x=4,得到最终结果21,后两个同理。可知,lambda嵌套的顺序是由内向外的,用def函数定义可表示为:
这里写图片描述

可以看到,函数定义的方式与lambda嵌套的方式参数传入的顺序是相反的,即由外向里。

此外,python中有几个常用的全局函数可与lambda配套使用,具体如下:
(1)filter:对于序列中的元素进行筛选,最终获取符合条件的序列

这里写图片描述

注意:这里我用的是python3.5,3.x的Python里filter返回的是iterator类型,不能直接打印,需要用list()将其转化过来,下面同理
(2)map:遍历序列,对序列中每个元素进行操作,最终获取新的序列。
这里写图片描述

(3)reduce:对于序列内所有元素进行累计操作
这里写图片描述

注:在python 3.x中, reduce已经不在built-in function里了, 要用它就得from functools import reduce.
详见The fate of reduce() in Python 3000

最后,虽然lambda使得代码更为简洁,但是不如直接用函数表示的方式来的直观,同时它的应用也因为表达式的书写而受限,即仅能用于封装有限的逻辑进去。

原创粉丝点击