您的位置:首页 > 编程语言 > Python开发

Python lambda(匿名函数)函数总结

2016-05-13 22:06 585 查看
Python lambda(匿名函数)函数总结

除了def语句之外,Python还提供了一种生成函数对象的表达式形式。由于它与LISP语言中的一个工具很相似,所以就称为lambda。表达式创建一个之后能够调用的函数,但是它返回了一个函数而不是将这个函数赋值给一个变量名,这也是lambda有时候叫做匿名函数的原因。

lambda表达式

lambda的一般形式是关键字lambda,之后是一个或多个参数,紧跟的是一个冒号,之后是一个表达式:

lambda 参数1,参数2,参数3,…,参数n : 表达式

lambda特点

1 lambda是一个表达式,而不是一个语句,所以lambda可以出现在python语 法不允许def出现的地方。

2 lambda的主题是一个单个表达式,而不是一个代码块,lambda通常要比def功能要小:仅能够在lambda主体中封装有限的逻辑进去,连if语句都不能用。所以lambda是一个为编写简单的函数而设计的,而def用来处理更大的任务。

几个例子:

>>def foo():return ‘hello’   #函数名为foo
>>lambda : ‘hello’          #无参数 无函数名

>>f = lambda x, y, z: x + y + z
>>f(2,3,4)
9


与之效果相同的def表达式为:

>>def func(x, y, z):
... return x + y + z
...
>>func(2,3,4)
9


默认参数也能够在lambda参数中使用,就像在def中使用一样:

>>x = (lambda a = ’fee’,b = ‘file’, c = ‘foe’: a + b + c)
>>x(‘wee’)
‘weefiefoe’


在lambda主体中的代码像在def内代码一样遵循相同的作用域查找法则。Lambda表达式引入的一个本地作用域更像一个嵌套的def语句,将自动从上层函数中、模块中以及内置作用域中查找变量名。

>>def knights():
... Title = ‘sir’
... action = (lambda x: title + ‘ ‘ + x)
... return action
>>act = knights()  #把函数action赋值给act
>>act(‘robin’)     #调用action()
‘Sir robin’


根据参数是否为1 决定s为yes还是no

>>> s = lambda x:"yes" if x==1 else "no"
>>> s(0)
'no'
>>> s(1)
'yes'


为什么使用lambda

通常来说,lambda起到了一种函数速写的作用,允许在使用的代码内嵌入一个函数的定义。它们完全是可选的(当然你可以使用def语句代替),但在你仅需要嵌入小段可执行代码的情况下它们会带来更简洁的代码结构。在非多次调用的函数的情况下,lambda表达式即用既得,提高性能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python lambda 函数