总有人争论lambda到底是不是个好东西,说白了,它就是一把手术刀,不是一把锤子。
用对了地方,代码简洁高效;用错了,就是一团没人看得懂的乱麻。

编辑
许多人刚学就拿lambda和`map`、`filter`一起用,觉得很酷。
但说实话,大部分情况,列表推导式`[x for x in numbers if x % 2 == 0]`比`list(filter(lambda x: x % 2 == 0, numbers))`更直观,也更Pythonic。
lambda真正的威力,是作为高阶函数的“一次性”参数。

编辑
列如给`sorted`传一个复杂的排序规则,或者在`functools.reduce`里定义一个累积操作。
这时候专门`def`一个只用一次的小函数,的确 有点小题大做。
它最大的坑,是“延迟绑定”。

编辑
在循环里创建一堆lambda,你会发现它们全都“记住”的是循环变量最后的值,而不是创建那一刻的值。
新手百分之百会掉进去。
想解决?

编辑
得用`lambda i=i: …`这种默认参数的技巧来固定值。
lambda也能玩闭包,像`def maker(n): return lambda x: x n`这样,批量制造功能单一的小函数。
这在某些场景下超级方便。

编辑
但千万别在lambda里写太复杂的逻辑。
用三元表达式`'a' if condition else 'b'`已经是极限了。再复杂,请老老实实写`def`。代码是给人读的,不是给机器炫技的。
所以,lambda不是银弹。把它当成一个方便的工具,用在那些“需要一个简单函数但又懒得命名”的瞬间,就对了。如果一个lambda让你琢磨超过三秒,那它就该被`def`取代。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...
