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
<function <lambda> 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核心编程》供大家学习!

python中的lambda知多少!的更多相关文章

  1. 【转】python中的lambda函数

    http://www.cnblogs.com/coderzh/archive/2010/04/30/python-cookbook-lambda.html lambda函数也叫匿名函数,即,函数没有具 ...

  2. python中的lambda表达

    C++中的lambda表达式与C++11增加标准库,是一个简短的匿名的可调用对象,编译器会将其转化为一个匿名类的对象.lambda表达式的最大特点就是简短灵活.调用方便.它不须要处理非常复杂的逻辑.通 ...

  3. 在Python中使用lambda高效操作列表的教程

    在Python中使用lambda高效操作列表的教程 这篇文章主要介绍了在Python中使用lambda高效操作列表的教程,结合了包括map.filter.reduce.sorted等函数,需要的朋友可 ...

  4. 关于Python中的lambda

    lambda是Python编程语言中使用频率较高的一个关键字.那么,什么是lambda?它有哪些用法?网上的文章汗牛充栋,可是把这个讲透的文章却不多.这里,我们通过阅读各方资料,总结了关于Python ...

  5. Python中的lambda函数介绍

    Lambda函数,即Lambda 表达式(lambda expression),是一个匿名函数(不存在函数名的函数),Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lam ...

  6. 转:关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解

    lambda是Python编程语言中使用频率较高的一个关键字.那么,什么是lambda?它有哪些用法?网上的文章汗牛充栋,可是把这个讲透的文章却不多.这里,我们通过阅读各方资料,总结了关于Python ...

  7. python中的lambda表达式

    lambda是python中匿名函数的写法  我们可以在不定义函数名的情况下一边定义并调用这个函数 例子: 普通方法定义函数:def  plus(a,b): return a+b lambda方法  ...

  8. python 中: lambda

    lambda 定义了一个匿名函数,是代码更简洁 lambda x:x+1和def g(x): return x+1是相同的哦. python 中的map,filter, reduce 函数为序列内置函 ...

  9. Python中的lambda的简单介绍

    在学习python的过程中,lambda的语法经常出现,现在将它整理一下,以备日后查看. 1.lambda是什么? 举个例子如下: func=lambda x:x+1 print(func(1)) p ...

随机推荐

  1. C++使用new和不使用new创建对象区别

    前言 在使用面向对象的时候,发现使用new和不使用new创建的对象区别还是蛮大的,做个总结: 总结 new创建的是一个指向类对象的指针,需要指针进行接收,一处初始化,多处使用,但是不用new创建的话不 ...

  2. Elasticsearch 横向扩容以及容错机制

    写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 参考内容: <Ela ...

  3. BZOJ 1022 [SHOI2008]小约翰的游戏John AntiNim游戏

    1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1475  Solved: 932[Submit][ ...

  4. Codeforces Round #288 (Div. 2) C. Anya and Ghosts 模拟 贪心

    C. Anya and Ghosts time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. sass compass问题小结

    1.中文注释编译报错Invalid GBK character的问题,找到ruby sass安装目录,如D:\Ruby22-x64\lib\ruby\gems\2.2.0\gems\sass-3.4. ...

  6. django源码(2.0.2)粗解之命令行执行

    前言 django的命令行在整个的django web开发中都会经常用到,而且是必须得用到.所以,能够了解下django的命令行实现其实是非常有帮助的. 如果大家比较关心django命令的详细说明和使 ...

  7. PHPExcel 导出2003和2007的excel文档实例

    require_once 'common/excel/PHPExcel.php'; require_once 'common/excel/phpExcel/Writer/Excel2007.php'; ...

  8. 在C#中实现视频播放器

    当我们需要在C#中实现视频播放器的时候,可以使用如下几种方法: 一.使用MediaPlayer ActiveX控件 在C#中支持视屏播放器最简单的方式就是插入MediaPlayer控件了,在WPF中还 ...

  9. 不用软件快速拥有几百个QQ群并都是管理员

    不用软件快速拥有几百个QQ群并都是管理员!快速拥有有几十万精准数据库的方法 !和快速收集上亿邮箱的思维方法(附上5种赚钱方法).pdf_免费高速下载|百度云 网盘-分享无限制 http://pan.b ...

  10. 查找(二)简单清晰的B树、Trie树具体解释

    查找(二) 散列表 散列表是普通数组概念的推广.因为对普通数组能够直接寻址,使得能在O(1)时间内訪问数组中的任何位置.在散列表中,不是直接把keyword作为数组的下标,而是依据keyword计算出 ...