【不得不说系列】Python匿名函数详解:从基础到高阶的实用指南

内容分享1小时前发布
0 0 0

总有人争论lambda到底是不是个好东西,说白了,它就是一把手术刀,不是一把锤子。

用对了地方,代码简洁高效;用错了,就是一团没人看得懂的乱麻。

【不得不说系列】Python匿名函数详解:从基础到高阶的实用指南

编辑

许多人刚学就拿lambda和`map`、`filter`一起用,觉得很酷。

但说实话,大部分情况,列表推导式`[x for x in numbers if x % 2 == 0]`比`list(filter(lambda x: x % 2 == 0, numbers))`更直观,也更Pythonic。

lambda真正的威力,是作为高阶函数的“一次性”参数。

【不得不说系列】Python匿名函数详解:从基础到高阶的实用指南

编辑

列如给`sorted`传一个复杂的排序规则,或者在`functools.reduce`里定义一个累积操作。

这时候专门`def`一个只用一次的小函数,的确 有点小题大做。

它最大的坑,是“延迟绑定”。

【不得不说系列】Python匿名函数详解:从基础到高阶的实用指南

编辑

在循环里创建一堆lambda,你会发现它们全都“记住”的是循环变量最后的值,而不是创建那一刻的值。

新手百分之百会掉进去。

想解决?

【不得不说系列】Python匿名函数详解:从基础到高阶的实用指南

编辑

得用`lambda i=i: …`这种默认参数的技巧来固定值。

lambda也能玩闭包,像`def maker(n): return lambda x: x n`这样,批量制造功能单一的小函数。

这在某些场景下超级方便。

【不得不说系列】Python匿名函数详解:从基础到高阶的实用指南

编辑

但千万别在lambda里写太复杂的逻辑。

用三元表达式`'a' if condition else 'b'`已经是极限了。再复杂,请老老实实写`def`。代码是给人读的,不是给机器炫技的。

所以,lambda不是银弹。把它当成一个方便的工具,用在那些“需要一个简单函数但又懒得命名”的瞬间,就对了。如果一个lambda让你琢磨超过三秒,那它就该被`def`取代。

© 版权声明

相关文章

暂无评论

none
暂无评论...