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表达å¼�的身影了。