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. Activity初接触

    Activity中TextView的文字显示Hello Android: 1.直接显示:<TextView android:text="Hello Android" /> ...

  2. [CareerCup] 6.3 Water Jug 水罐问题

    6.3 You have a five-quart jug, a three-quart jug, and an unlimited supply of water (but no measuring ...

  3. SecureCrt脚本(三)二级对象之Screen详解

    Crt自动化 测试 SecureCrt脚本 JS脚本   1.引言 2.Screen属性和方法 2.1.属性 2.1.1.CurrentColumn 2.1.2.CurrentRow 2.1.3.Co ...

  4. css样式重写

    //我们经常想修改插件的某一个或几个样式特性,并保留其它的样式.而不是把某个css全部重写一遍. /*原有样式*/.ninew {padding: 0 10px;width: 600px;height ...

  5. 项目开发中遇到的extjs常见问题

    事件触发机制 l 给某一个控件添加事件. obj.addEvents( {search : true }); l 给某一个事件添加处理函数 n 给一个对象或变量添加监听及对应得处理,可以在创建时,通过 ...

  6. PHP中的中文截取乱码问题_gb2312_utf-8

    一.字符串编码为gb2312,一个中文占俩字节 public static function chinesesubstr($str, $start, $len) { // $str指字符串,$star ...

  7. Unity3D 游戏开发构架篇 ——角色类的设计与持久化

    在游戏开发中,游戏角色占了很大的篇幅,可以说游戏中所有的内容都是由主角所带动.这里就介绍一下角色类的设计和持久化. 一.角色类应用场景和设计思想 游戏中的角色类型不一而足,有不同的技能,有不同的属性等 ...

  8. IIS7 配置 PHP5.5

    本文环境: 操作系统:Win7(x64) 中文专业版 PHP       :V5.5 首先添加IIS. 控制面板-〉程序-〉打开或关闭Windows功能 1. 勾选“Internet 信息服务”   ...

  9. 6. Scala面向对象编程(基础部分)

    6.1 基本介绍 6.1.1 Scala语言是面向对象的 1) Java时面向对象的编程语言,由于历史原因,Java中海存在着非面向对象的内容:基本类型,null,静态方法等 2) Scala语言来自 ...

  10. Hibernate- 连接查询

    01.搭建开发环境 02.连接查询 package com.gordon.test; import java.util.Arrays; import java.util.List; import or ...