python语言中lambda

lambda
An anonymous inline function consisting of a single expression which is evaluated when the function is called. The syntax to create a lambda function is lambda [arguments]: expression
lambda函数也叫匿名函数,即,函数没有具体的名称,而用def创建的方法是有名称的。
lambda允许用户快速定义单行函数,当然用户也可以按照典型的函数定义完成函数。lambda的目的就是简化用户定义使用函数的过程。
例如:
log2=lambda x:log(x)/log(2)

就是定义了一个以2为底的对数函数。这个例子是有参数的,还有一种情况是没有参数的:

>>>bar=lambda :'this is a bar'
>>>print bar
this is a bar

Lambda函数,是一个匿名函数,创建语法:

 lambda parameters:express

parameters:可选,如果提供,通常是逗号分隔的变量表达式形式,即位置参数。

expression:不能包含分支或循环(但允许条件表达式),也不能包含return(或yield)函数。如果为元组,则应用圆括号将其包含起来。

调用lambda函数,返回的结果是对表达式计算产生的结果。如下例子所示:

1
2
3
4
5
6
根据参数是否为 1 决定s为yes还是no
>>> s = lambda x: "yes" if x = = 1 else "no"
>>> s( 0 )
'no'
>>> s( 1 )
'yes'
上面例子中,将if...else语句缩减为单一的条件表达式,语法为:

               expression1 if A else expression2

如果A为True,条件表达式的结果为expression1,否则为expression2 

  举例说明lambda函数的一些使用方法:

使用 sorted ()方法和 list .sort()方法进行排序
elements = [( 2 , 12 , "A" ),( 1 , 11 , "N" ),( 1 , 3 , "L" ),( 2 , 4 , "B" )]
>>> sorted (elements)
[( 1 , 3 , 'L' ), ( 1 , 11 , 'N' ), ( 2 , 4 , 'B' ), ( 2 , 12 , 'A' )]
 
根据elements每个元组后两项进行排序,e表示列表中每个三元组元素  #关于元组的使用,具体可见下一篇
在表达式是元组,且 lambda 为一个函数的参数时, lambda 表达式的圆括号是必需的
>>> elements.sort(key = lambda e:(e[ 1 ],e[ 2 ]))
>>> elements
[( 1 , 3 , 'L' ), ( 2 , 4 , 'B' ), ( 1 , 11 , 'N' ), ( 2 , 12 , 'A' )]
 
分片方式得到同样的效果
>>> elements.sort(key = lambda e:e[ 1 : 3 ])
>>> elements
[( 1 , 3 , 'L' ), ( 2 , 4 , 'B' ), ( 1 , 11 , 'N' ), ( 2 , 12 , 'A' )]
 
>>> elements.sort(key = lambda e:(e[ 2 ].lower(),e[ 1 ]))
以下两种方法等价,都可以通过调用area( 5 , 3 ),结果相同
>>> area = lambda b,h: 0.5 * b * h
>>> def area(b,h):
     return 0.5 * b * h
 
默认字典使用,存取不不在的键时,创建一个新项,键为这个不存在的键,值为 lambda 函数的值
>>> import collections
>>> one_dict = collections.defaultdict( lambda : - 1 )
>>> two_dict = collections.defaultdict( lambda :( 0 , 0 ))
>>> three_dict = collections.defaultdict( lambda : "No message avaliable" )




猜你喜欢

转载自blog.csdn.net/weixin_40662331/article/details/80700401