写代码时经常遇到这种场景:需要传一个简单函数进去,比如排序时按某个字段比大小,或者给列表每个元素加个处理逻辑。这时候你可能随手就写了个 def 函数,但其实——一行就能搞定的事,真没必要单独定义一个名字。
lambda 是什么?
lambda 表达式就是个‘匿名函数’,没有名字,只干一件小事。比如 Python 里把列表里的数字都乘 2:
nums = [1, 2, 3, 4]
result = list(map(lambda x: x * 2, nums))
这里 lambda x: x * 2 就是 lambda 表达式,等价于:
def double(x):
return x * 2
但写法更轻量,适合‘即用即抛’的场合。
那类(class)又是干啥的?
类是用来封装数据和行为的。比如你做个小工具管理学生信息,得存姓名、年龄,还得有‘打印信息’‘算平均分’这些动作——这时候用类就顺手多了:
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
def show(self):
print(f'{self.name}: {self.score}')
s = Student('小明', 89)
s.show()
类能保存状态(比如 self.name),还能复用方法,是组织复杂逻辑的好帮手。
lambda 和类,不是非此即彼
有人以为‘用了 lambda 就不用类’,其实不是。它们解决的问题根本不同:lambda 是‘临时函数’,类是‘可复用的对象模板’。就像家里有把螺丝刀(lambda),也有一套工具箱(class)——拧颗螺丝用螺丝刀,修整台电脑就得打开工具箱。
再举个实际例子:写个按钮点击回调。前端 JavaScript 里常这么写:
button.addEventListener('click', () => console.log('点我了'));
这里用箭头函数(JS 的 lambda)很自然;但如果你要做个完整的计算器组件,带输入框、历史记录、清空功能……那就得用 class 封装整个逻辑。
一个小提醒
别为了用 lambda 而硬写。比如这样就不太合适:
process_data = lambda data: (
data.strip().lower().replace(' ', '_')
if isinstance(data, str) else str(data).strip()
)
逻辑一多,可读性反而下降。该用普通函数或类的时候,别强撑着塞进 lambda 里。