博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lambda 表达式使用说明
阅读量:5031 次
发布时间:2019-06-12

本文共 1864 字,大约阅读时间需要 6 分钟。

Lambda 表达式

Lambda函数又称之为匿名函数,所谓匿名函数就是没有名字的函数。在我们日常的开发过程中,其实存在很多函数其实只是临时使用一次,或者这个函数的功能本身就非常的简单,例如就是做个加法或者交换下位置一类的,在这个时候,如果还是采用传统的方法去定义一个标准的函数,就显得多余了。

Lambda语法格式

语法格式:==lambda arguments: ==expression====

  • lambda: 函数关键字
  • arguments: 函数的参数列表,参数之间用,进行分割
  • expression:返回的表达式,且表达式只能有一个。

举例:

实现一个最常见的x*x的函数。

>>> square = lambda x:x*x>>> square
at 0x0000000002705B38>>>> y = square(2)>>> y4

从上面的例子可以看到第一个x 是代表的参数,后面的x*x是函数的内容。

应用举例

这里讨论的filter函数和下面讨论的map函数并非lambda函数的一部分,是完全独立的,属于python的内建函数,详情可以参考第11章的内容。这里把他们放在一起,主要是因为这几个函数经常一起出现使用而已。

lambda 与filter函数联动

==filter(function,iterable)==

iterable 是迭代器,指向需要可能要返回的数据;function是过滤的条件,其返回值是true or false。当filter函数返回为真时,迭代函数返回对应的值。

>>> test = [1,2,3,4,5]>>> ret = list(filter(lambda x:(x>2),x+5))Traceback (most recent call last):  File "
", line 1, in
NameError: name 'x' is not defined>>> ret = list(filter(lambda x:(x>2),test))>>> >>> ret[3, 4, 5]>>>

我们先看上面代码中运行正常的这部分:先看filter函数:function是一个lambda 函数 lambda x:(x>2) 意思是参数值必须要大于2。根据前面的解释,如果function为真,那么迭代函数就返回对应的指向值,所以得到的数据是3,4,5。

看了正确的部分,我们再来看错误的部分:第一个错误的部分是迭代函数写成了x+5,想表达的意思是参数值x+5,但实际上这里的x 是需要指的传入的值,而不是参数值,因此报的错误也是非常的明显:x没有定义。

与map函数联合

==map(function,iterable,...)== 首先map 函数主要用于映射关系,其与filter一样,后面是迭代器。其返回值是一个map对象,需要转变为列表或者元祖才能查看其中的内容。如:

>>> list(map(lambda x: x*2,range(5)))[0, 2, 4, 6, 8]>>> range(5)[0, 1, 2, 3, 4]

从上面的例子可以看出,map函数主要是将iterable中的值作为参数逐个传给function,经过函数执行以后,返回一个list结果。但需要注意的是刚才我们看到的函数是可以有多个参数的,如果在多个函数下结果又是如何了,其实是一样的。如下:

>>> list(map(lambda x,y:x+y,range(1,5),range(5,9)))[6, 8, 10, 12]

Reduce函数

Reduce函数很多时候是和map函数合并用的,MR模型的经典就不具体描述了。将上面的map函数修改一下:

>>> reduce(lambda x,y:x+y,range(1,5))10

可以看到reduce的结果就是一个结果整数了,而不是像map那样是一个List。

实际上reduce的函数形式如下:reduce(function,sequence,starting_value)。对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用.

参考文档:

转载于:https://www.cnblogs.com/angellst/p/8445414.html

你可能感兴趣的文章
tp5.0中及其常用方法的一些函数方法(自己看)和技巧(不断添加中)
查看>>
美团推荐算法实践
查看>>
自定义注解使用
查看>>
监听3
查看>>
七个人生工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理、二八原则
查看>>
BZOJ 2120 树状数组套平衡树
查看>>
【ARM-Linux开发】Linux内存管理:ARM Memory Layout以及mmu配置
查看>>
机器学习技法总结(六)Decision Tree Hypothesis
查看>>
Tracking-Learning-Detection (TLD算法总结)
查看>>
07 数据结构
查看>>
开发日志
查看>>
基于深度及广度优先搜索的迷宫问题的演示
查看>>
Nginx模块详解
查看>>
使用SQLiteHelper创建数据库并插入数据
查看>>
ubuntu用户及用户组文件信息
查看>>
你学过的东西总会在某个时候用到
查看>>
关于Python开发小程序的随笔path4
查看>>
jQuery插件:跨浏览器复制jQuery-zclip
查看>>
POJ 3468 A Simple Problem with Integers(线段树 成段增减+区间求和)
查看>>
一个简单的 Jwt Demo
查看>>