python定义匿名函数关键字_python入门基础之lambda匿名函数详解

python入门基础之lambda匿名函数详解

刚开始学习python的时候很多人可能对于lambda函数不了解,感觉和def很混乱,下面我来介绍一下lambda函数

我从一下几个方面来介绍lambda:

1、lambda简介

2、lambda与def不同之处

3、lambda的使用方法

1、lambda简介

先来看一段代码示例:

u=1224813219,856679094&fm=173&app=25&f=JPEG?w=509&h=296&s=B8D2A144DAE48F6C16C57D0F0100E0C2

第一行是lambda声明,x,y相当于传入的参数,整个函数会返回x+y的值。lambda作为一个表达式,定义了一个匿名函数,上例的代码x,y为入口参数,x+y为函数体。在这里lambda简化了函数定义的书写形式。

u=3426042992,1862360947&fm=173&app=25&f=JPEG?w=240&h=240&s=008CF013410A77ED26DD515E0300D030

python允许用lambda关键字创造匿名函数。匿名是不需要以标准的方式来声明,比如说使用 def 语句。(除非赋值给一个局部变量,这样的对象也不会在任何的名字空间内创建名字,上面的例子中会创建名字。)

作为函数,它们也能有参数。一个完整的 lambda"语句"代表了一个表达式,这个表达式的定义体必须和声明放在同一行。语法如下:

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

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

u=2584179035,316925701&fm=173&app=25&f=GIF?w=150&h=217&s=6594759E9E117AC85C548CE40300702B

2、lambda匿名函数与def区别

lambda 和def它两个的基本用法差不多,参数都是可选,也都会返回对象

如下:

u=3103436709,2091363208&fm=173&app=25&f=JPEG?w=479&h=598&s=E0C2B540DAAE976C5CF5740F0000E0C1

不同之处:

lambda可以定义一个匿名函数,而def定义的函数必须有一个名字。这应该是lambda与def两者最大的区别。

u=2514079441,2460295347&fm=173&app=25&f=JPEG?w=198&h=135&s=2BE87A2372869BA3783DB0CB0100C0A0

lambda是一个表达式,而不是一个语句(lambda is an expression, not a statement.)因此,lambda能够出现在Python语法不允许def出现的地方——例如,在一个列表常量中或者函数调用的参数中。

u=1058833143,3608164164&fm=173&app=25&f=JPEG?w=440&h=275&s=0818EA1354205EA1E65128D50100C0A2

lambda的主体是一个单个的表达式,而不是一个代码块。(lambda's body is a single expression, not a block of statements.),lambda里面的语句相当于def中return中的代码一样。只能是简单的表达式,所以说lambda的能力小于def,在lambda中只能使用简单的语法,不能使用if else while return等语句

u=2467240723,2319315011&fm=173&app=25&f=JPEG?w=250&h=192&s=1AAA74231D4B48CA0CD4E1DA0000C0B0

它的设计理念为:lambda是一个为编写简单的函数而设计的,而def用来处理更大的任务。(lambda is designed for coding simple functions, and def handles larger tasks.)

3、lambda的使用

为什么要使用lambda?

1、lambda函数主要用来写一些小体量的一次性函数,避免污染环境,同时也能简化代码。

2、lambda起到了一种函数速写的作用,允许在使用的代码内嵌入一个函数的定义。他们完全是可选的(你总是能够使用def来替代它们),但是你仅需要嵌入小段可执行代码的情况下它们会带来一个更简洁的代码结构。

例如:

map( lambda x: x*x, [y for y in range(10)] )

这个写法要好过

def sq(x):

return x * x

map(sq, [y for y in range(10)])

u=2225371324,1790412535&fm=173&app=25&f=JPEG?w=198&h=197&s=8641B05ACEBA7DA35CE00D430100A0E1

3、lambda使用可以加参数也可以不加参数

有参数就如同上面的用法

无参数:

u=74827827,3734873889&fm=173&app=25&f=JPEG?w=545&h=281&s=E8C2A144CAE4896E0CE1FC0B0100E0C1

4、lambda通常用来编写跳转表(jump table),也就是行为的列表或字典,能够按照需要执行相应的动作。如下段代码所示。

u=2745271604,2247445918&fm=173&app=25&f=JPEG?w=396&h=257&s=A8C28747CAA49F6C1E59E40E0000E0C3

总结:

1、lambda只是一个表达式,函数体比def简单很多

2、lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去

3、lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数

4、 简单单行代码或者一次性的函数可以用lambda函数来书写,可以让代码更简洁。

5、 对于复杂函数或者函数体体量大的函数,最好不要用lambda函数,会增加代码的阅读难度,使代码晦涩难懂。

6、 在非多次调用的函数的情况下,lambda表达式即用既得,提高性能

码字不易,多多关照

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值