我们可以使用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