Python中的匿名函数-lambda

时间:2022-03-07 19:14:51

我们可以使用lambda关键字来创建匿名函数在Python中,所谓“匿名”是因为函数不是用标准的方式声明,即没有使用def,除非被复制给一个局部变量,否则这些对象是不创建名字的。作为函数,可能也会有参数。一个完整的lambda语句代表了一个表达式。

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

参数是可选的,通常在表达式中被使用。

例子(右侧是等价的lambda表达式):

def add(x,y): return x+y                       《==》  lambda x, y: x + y

同时可以使用默认的变量参数:

def usuallyAdd2(x , y=4): return x+y    《==》 lambda x,y=4: x+y

def showAllAsTuple(*z): return  z        《==》lambda *z:  z

运行结果:

>>>a = lambda x,y = 4: x + y

>>>a(6)

10

>>>a(3,2)

5

>>>a(0)

4

>>>b=lambda *z: z

>>>b(98,'xyz')

(98,'xyz')

>>>b(60)

(60,)

尽管lambda是一个单行版的函数,但是不同于C++中的inline语句。

inline是在调用的时候直接展开,免去调用函数的过程以提高性能。而lambda表达式就像一个函数,在被调用的时候创建一个框架对象。

                                        -----------------------------------《Core Python Programming》

小例子  

result = {
'a' : lambda x : x * 10,
'b' : lambda x : x + 20,
'c' : lambda x : x - 5
}

f = result['c']
print f(6)
>>>1

下面是稍复杂的例子,表达式是函数

def add(a,b):
return a + b
def sub(a,b):
return a - b
def multi(a,b):
return a * b
def div(a,b)
if b:
return a / b
else:
return “diversor can’t be zero”

print "使用lambda匿名函数简化操作"
def calc(type, x, y):
calculation = {'+':lambda :add(x, y),
'-':lambda: sub(x, y),
'*':lambda:multi(x, y),
'/':lambda:div(x, y)}
return calculation[type]()
#calc = {1:lambda:add(x,y)}[value]()
result1 = calc('+',4, 6)
result2 = calc('*', 10, 8)
print "result1 = ", result1
print "result2 = ", result2

>>> result1 = 10
>>> result2 = 80