-
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'
|
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"
)