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. git中如何合并某个指定文件?

    分支A_bracn和B_branch,只想将A_branch分支的某个文件f.txt合并到B_branch分支上.git checkout A_branch      git checkout --p ...

  2. How to edit the init.rc in android

      We have to perform the following steps to edit your init.rc successfully:   . Download the BOOT (R ...

  3. java 实现输出姓和名

    package xiaojie; import java.util.Scanner; public class baiJiaXing { public static void main(String[ ...

  4. WINDOWS 线程 纤程 进程

    http://www.cnblogs.com/edisonchou/p/4848131.html#3277980

  5. Geeks 一般二叉树的LCA

    不是BST,那么搜索两节点的LCA就复杂点了,由于节点是无序的. 以下是两种方法,都写进一个类里面了. 当然须要反复搜索的时候.能够使用多种方法加速搜索. #include <iostream& ...

  6. Android实现两次按下返回键退出

    @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BAC ...

  7. Matlab绘图控制命令

    [转载] 图形的控制与表现 (Figure control and representation) MATLAB提供的用于图形控制的函数和命令: axis:  人工选择坐标轴尺寸.     clf: ...

  8. 高手写的“iOS 的多核编程和内存管理”

    原文地址:http://anxonli.iteye.com/blog/1097777 多核运算 在iOS中concurrency编程的框架就是GCD(Grand Central Dispatch), ...

  9. DocumentManager在标签位置显示气泡框 z

    关于DevExpress DockManager下的DocumentManager头部标签如何显示气泡框,类似Visual studio那样显示文件的路径,如下图所示,------- 方式很简单,从工 ...

  10. Kafka开发环境搭建(五)

    如果你要利用代码来跑kafka的应用,那你最好先把官网给出的example先在单机环境和分布式环境下跑通,然后再逐步将原有的consumer.producer和broker替换成自己写的代码.所以在阅 ...