7.6 定义匿�或内�函数¶

问题¶

你想为 sort() �作创建一个很短的回调函数,但��想用 def 去写一个�行函数, 而是希望通过�个快�方�以内�方��创建这个函数。

解决方案¶

当一些函数很简�,仅仅�是计算一个表达�的值的时候,就�以使用lambda表达��代替了。比如:

>>> add = lambda x, y: x + y
>>> add(2,3)
5
>>> add('hello', 'world')
'helloworld'
>>>

这里使用的lambda表达�跟下�的效果是一样的:

>>> def add(x, y):
...     return x + y
...
>>> add(2,3)
5
>>>

lambda表达�典型的使用场景是排�或数�reduce等:

>>> names = ['David Beazley', 'Brian Jones',
...         'Raymond Hettinger', 'Ned Batchelder']
>>> sorted(names, key=lambda name: name.split()[-1].lower())
['Ned Batchelder', 'David Beazley', 'Raymond Hettinger', 'Brian Jones']
>>>

讨论¶

尽管lambda表达��许你定义简�函数,但是它的使用是有�制的。 你�能指定�个表达�,它的值就是最�的返回值。也就是说�能包�其他的语言特性了, 包括多个语���件表达��迭代以�异常处�等等。

你�以�使用lambda表达�就能编写大部分python代�。 但是,当有人编写大�计算表达�值的短�函数或者需�用户�供回调函数的程�的时候, 你就会看到lambda表达�的身影了。