博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中的lambda知多少!
阅读量:5159 次
发布时间:2019-06-13

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

        python允许使用lambda关键字创造匿名函数,匿名函数是因为不需要以标准的方式来声明,比如说,使用def语句。(除非赋值给一个局部变量,这样的对象也不会再任何的名字空间内创建名字)然而,作为函数,他们也能有参数,一个完整的啦,lambda语句代表了一个表达式,这个表达式的定义体必须和声明放在同一行。我们现在来演示一下匿名函数的语法:

      lambda[arg1[,arg2,...,argN]]:expression

      参数可选,如果时候用的参数话,参数通常也是表达式的一部分。

核心笔记:lambda表达式返回可调用的函数对象

        用合适的表达式调用一个lambda生成一个可以想起他函数一样使用的函数对象。他们可被传入给其他函数,用额外的引用别名化,作为容器对象以及作为可调用对象调用(如果需要的话,可以带参数)。当被调用的时候,如果给定相同的参数的话,这些对象会生成一个和相同表达式等价的结果。他们和那些等价表达式计算值相同的函数是不能区分的。

       在我们看任何一个使用lambda的例子之前,我们意欲复习一下单行语句,然后展示下lambda表达式的相似之处:

       def true():

              return True

上面的函数没有带任何的参数并且总是返回True,python中单行函数可以和标题写在同一行。如果那样的话,我们重写下我们的true()函数以使其看起来像如下的表达:

       def true():return True

       在整个章节中,我们将以这样的方式呈现命名函数,因为这有助于形象化与它们呢等价的lambda表达式。至于我们的true()函数,使用true()函数,使用lambda的等价表达式(没有参数,返回一个True)为:lambda:True

       命名的true()函数的用法相当的明显,但lambda就不是这样。我们仅仅是这样用,或者我们需要在某些地方用进行赋值,一个lambda函数自己就是无目的的服务

 

>>> lambda:True
at 0x02A21BF0>

       在上面的例子中,我们简单的用lambda创建了一个函数对象,但是既没有在任何地方保存它,也没有调用它。这个函数对象的引用技术在函数创建时被设置为True,但是因为没有引用保存下来,计数有回到零,然后被垃圾回收掉。为了保留住这个对象,我们姜它保存到一个变量中,以后就可以随时调用。现在可能就是一个好机会。

 

 

>>> true = lambda:True>>> true()True>>>

       这里用他来赋值看起来非常有用,相似地,我们可以吧lambda表达式赋值给一个如列表和元组的数据结构,其中基于一些输入标准,我们可以选择那些函数可以执行以及参数应该是什么。在下个部分,我们将展示如何去使用函数式编程构建的lambda表达式。

 

      我们设计一个带2个数字或者字符串参数,返回数字之和或者已经拼接的字符串的函数。我们先将展示一个标准别的函数,然后再是其未命名的等价物。

def add(x,y):return x+y ? lambda x,y:x+y

默认以及可变的参数也是允许的,如以下的例子:

def usuallyAdd(x,y=2):return x+y ? lambda x,y=2:x+y

       关于lambda最后补充一点,虽然看起来lambda是一个函数的单行版本,但是它不等于c++的内联语句,这种语句的目的是由于性能的原因,在调用时绕过函数的栈分配,lambda表达式运作起来就像一个函数,当被调用时,创建一个框架对象。

    注:以上资料参考自《python核心编程》供大家学习!

 

转载于:https://www.cnblogs.com/james1207/p/3253535.html

你可能感兴趣的文章
Caroline--chochukmo
查看>>
iOS之文本属性Attributes的使用
查看>>
从.Net版本演变看String和StringBuilder性能之争
查看>>
Excel操作 Microsoft.Office.Interop.Excel.dll的使用
查看>>
解决Ubuntu下博通网卡驱动问题
查看>>
【bzoj2788】Festival
查看>>
执行gem install dryrun错误
查看>>
Java SE之正则表达式一:概述
查看>>
HTML5简单入门系列(四)
查看>>
实现字符串反转
查看>>
转载:《TypeScript 中文入门教程》 5、命名空间和模块
查看>>
苹果开发中常用英语单词
查看>>
[USACO 1.4.3]等差数列
查看>>
Shader Overview
查看>>
Reveal 配置与使用
查看>>
Java中反射的学习与理解(一)
查看>>
C语言初学 俩数相除问题
查看>>
B/S和C/S架构的区别
查看>>
[Java] Java record
查看>>
jQuery - 控制元素显示、隐藏、切换、滑动的方法
查看>>