lambda
关于 Python 里的lambda其实很多人刚接触时都觉得有点神秘甚至有点多余——明明可以用def写个函数为什么还要用这种看起来像简化版的东西但用久了会发现它真正的作用不在于“写一个完整的函数”而在于“临时性地表达一个简单的计算意图”。你可以把lambda想象成厨房里那种一次性调料包。平时做菜你会把盐、糖、酱油分别放在固定的调料罐里这些就像用def定义的函数有名字可重复使用。但有时候你只是临时想调一个蘸料用一点点蒜末、酱油和醋搅和一下用完就扔不会特意装瓶贴标签。lambda就是这种“即拌即用”的调料包它不占地方不单独命名也不打算留到下次通常只在一个小范围内使用。举个例子比如你有一组人名想按姓氏的长度排序。如果专门写一个函数可能会这样defsurname_length(name):returnlen(name.split()[-1])names[Alice Smith,Bob Johnson,Charlie Brown]sorted_namessorted(names,keysurname_length)这当然没问题但如果你只是在这里用这一次专门写个函数感觉有点“隆重”。这时用lambda就更轻便sorted_namessorted(names,keylambdaname:len(name.split()[-1]))这一行就把意图说清楚了按姓氏长度排序。它没留下一个以后可能根本用不着的函数名代码的焦点完全集中在“排序”这个操作上。lambda最适合用在那些需要一个函数作为参数的地方比如sorted()、map()、filter()或者是在写一些回调时。它让你把注意力放在计算逻辑上而不是函数定义的形式上。当然它也不是万能的——如果一个计算逻辑很复杂或者需要多次复用那还是老老实实用def更好。lambda的设计初衷就是处理那些“一句话就能说完”的逻辑。有时候看别人写的代码lambda用得恰到好处时整段代码会显得很干净意图也清晰。但如果强行用lambda去包装多行逻辑反而会让代码难以阅读。这有点像穿衣服正式场合穿西装居家时穿T恤得体比统一更重要。最后提一个细节lambda本身其实是一个表达式而不是语句。这意味着它可以出现在def无法出现的地方比如列表内部、字典赋值中这种灵活性是它独有的。但灵活也意味着容易被滥用所以判断什么时候该用lambda什么时候不该用其实反映了一个开发者对代码“语境”的理解程度。