Python的lambda表达式

时间:2021-03-08 18:58:28

使用lambda来创建匿名函数,而用def创建的方法是有名称的,除了从表面上的方法名不一样外,python lambda还有哪些和def不一样呢?

1 python lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符,而def则会把函数对象赋值给一个变量。
2 python lambda它只是一个表达式,而def则是一个语句。

如果你在python 列表解析里用到python lambda,我感觉意义不是很大,因为python lambda它会创建一个函数对象,但马上又给丢弃了,因为你没有使用它的返回值,即那个函数对象。也正是由于lambda只是一个表达式,它可以直接作为python 列表python 字典的成员,比如:

info = [lambda a: a**3, lambda b: b**3]

在这个地方没有办法用def语句直接代替。因为def是语句,不是表达式不能嵌套在里面,lambda表达式在“:”后只能有一个表达式。也就是说,在def中,用return可以返回的也可以放在lambda后面,不能用return返回的也不能定义在python lambda后面。因此,像if或for或print这种语句就不能用于lambda中,lambda一般只用来定义简单的函数。

 

 

三、lambda函数的用途

 

 

1. 对于单行函数,使用lambda可以省去定义函数的过程,让代码更加精简。

 

2. 在非多次调用的函数的情况下,lambda表达式即用既得,提高性能

 

3.  如果可以使用for...in...if来完成的,坚决不用lambda。

如果使用lambda,lambda内不要包含循环,如果有,我宁愿定义函数来完成,使代码获得可重用性和更好的可读性。

lambda 是为了减少单行函数的定义而存在的。

lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。

 

--------------------------------------------------------------

lambda 语法: lambda [arg1[,arg2,arg3....argN]]:expression


1. 单个参数的:
g = lambda x:x*2
print g(3)
结果是6

2. 多个参数的:
m = lambda x,y,z: (x-y)*z
print m(3,1,2)
结果是4

 

3. 无参数

f = lambda:'beginman'

f()   #beginman

 

4. lambda used in filter, map, reduce function.

print range(6)    # 0,1,2,3,4,5
print range(1,6)  # 1,2,3,4,5
print reduce(lambda x,y:x*y, range(1,6))  #1*2*3*4*5

 

5. lambda can be used in common def fucntion.

def action(x):
    return lambda y: x+y

f = action(2) # this is a lambda object
print f(3)    # 5

 

-------------------------------------------------------------------------------------------------------------------------------------