《Python3 程序开发指南》
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函数的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
使用
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"
)
|
转载:https://www.cnblogs.com/xiao--yao/p/5024542.html