python lambda函数详细解析(面试经常遇到)

1 作用:通常是用来在python中创建匿名函数的

2 格式: lambda 参数[,参数] : 表达式

3 注意:

    (1)lambda定义的是单行函数, 如果需要复杂的函数,应该定义普通函数

    (2)lambda参数列表可以包含多个参数,例如 lambda x,y : x + y

    (3)lambda中的表达式不能含有命令, 而且只限一条表达式

4、lambda函数基础:

lambda函数也叫匿名函数,即,函数没有具体的名称,而用def创建的方法是有名称的。如下:

1
2
3
4
5
"""命名的foo函数"""
def foo():return 'beginman'  #Python中单行参数可以和标题写在一行
 
"""lambda关键字创建匿名函数,该表达式同以上函数"""
lambda:'beginman'

  上面的只是简单的用lambda创建一个函数对象,并没有保存它也没有调用它,时刻会被回收了。这里我们保存并调用:

1
2
bar = lambda:'beginman'
print bar()      #beginman

  从上面几个例子中,可易理解Python lambda语法:

1
lambda [arg1[,arg2,arg3....argN]]:expression

  lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。lambda语句构建的其实是一个函数对象。

1
print lambda:'beginman'   #<function <lambda> at 0x00B00A30>

 

 

无参数:

   如果没有参数,则lambda冒号前面就没有,如以上例子。

有参数:

1
2
3
4
5
6
7
8
def add(x,y):return x+y
add2 = lambda x,y:x+y
print add2(1,2)     #3
 
def sum(x,y=10):return x+y
sum2 = lambda x,y=10:x+y
print sum2(1)       #11
print sum2(1,100)   #101

 

 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
28
29
30
31
32
33
34
35
根据参数是否为1 决定s为yes还是no
>>> s = lambda x:"yes" if x==1 else "no"
>>> s(0)
'no'
>>> s(1)
'yes'
 
 
使用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")

 

posted @   淋哥  阅读(3248)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示