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. js的继承实现方式

    1. 使用call或者apply来实现js对象继承 function Animal(age){ this.age = age; this.say = function(){ console.log(' ...

  2. wikioi 1017 乘积最大

    dp[i][j]=max(dp[i][j],dp[t][k-1]*mapn[t+1][i]); dp[i][j]代表从0-i之间有j个乘号,mapn[i][j]表示第i位到第j位的数究竟是多少 #in ...

  3. Qt线程外使用Sleep

    一:方法1 QTime t; t.start(); while(t.elapsed()<1000){     QCoreApplication::processEvents();} 二:方法2 ...

  4. MySQL Proxy 实现MySQLDB 读写分离

    一.简述 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载平衡,故障.查询分析 ...

  5. POJ 1330 Nearest Common Ancestors (LCA,倍增算法,在线算法)

    /* *********************************************** Author :kuangbin Created Time :2013-9-5 9:45:17 F ...

  6. SyncThingWin -- Run syncthing as a windows service

    SyncThingWin Auto restart and minor bug fixes bloones released this on 23 Dec 2014 There is now an a ...

  7. c#开发地磅称重软件

    2012年时即做过一个地磅称重软件,最近公司又接了一个地磅过磅软件的项目,把遇到的问题总结一下以备后用. 1.接线问题 因为客户方原来单独使用仪表,仪表未有接线和电脑连接,为此颇费周折才做好了接线.接 ...

  8. 线程系列06,通过CLR代码查看线程池及其线程

    在"线程系列04,传递数据给线程,线程命名,线程异常处理,线程池"中,我们已经知道,每个进程都有一个线程池.可以通过TPL,ThreadPool.QueueUserWorkItem ...

  9. 用最简单的例子理解命令模式(Command Pattern)

    假设想让遥控器控制电灯的开关.电视机的开关和切换,该如何做? 所有的开.关.切换都是遥控器发出的指令,把这些指令统一抽象成一个接口. public interface IControl { void ...

  10. 22LINQ查询运算符返回IEnumerable<T>实例汇总

    本篇体验LINQ的各种查询运算符.   先创建一个泛型方法,用来显示查询结果: private static void DisplayQuery<T>(IEnumerable<T&g ...