《Python3 程序开发指南》
Lambda函数,是一个匿名函数,创建语法:
lambda parameters:express
parameters:可选,如果提供,通常是逗号分隔的变量表达式形式,即位置参数。
expression:不能包含分支或循环(但允许条件表达式),也不能包含return(或yield)函数。如果为元组,则应用圆括号将其包含起来。
调用lambda函数,返回的结果是对表达式计算产生的结果。
根据参数是否为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")
断言???