ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Python Lambda 表达式:从入门到实战

Python Lambda 表达式:从入门到实战 1. 引言Lambda 表达式是 Python 中一种简洁的匿名函数定义方式它允许我们在不显式使用def关键字的情况下快速创建一个小型函数。Lambda 表达式源自函数式编程思想在数据处理、排序、过滤等场景中非常实用。2. 什么是 Lambda 表达式2.1 基本语法Lambda 表达式的基本语法非常简单lambda参数列表:表达式它由三部分组成lambda关键字、参数列表可省略括号和冒号后的表达式。表达式的结果就是函数的返回值。举个简单的“栗子”lambdan:n1print(n(1))#输出22.2 与普通函数的对比# 普通函数defadd(x,y):returnxy# 等价的 lambda 表达式add_lambdalambdax,y:xyprint(add(3,5))# 输出 8print(add_lambda(3,5))# 输出 8两者功能完全一致但 lambda 写法更紧凑。3. Lambda 的核心用法3.1 作为参数传递Lambda 最常见的用途是作为高阶函数的参数例如sorted、map、filter等# 按字符串长度排序words[apple,kiwi,banana,pear]sorted_wordssorted(words,keylambdaw:len(w))print(sorted_words)# [kiwi, pear, apple, banana]3.2 与 map 结合# 对列表每个元素求平方nums[1,2,3,4,5]squareslist(map(lambdax:x**2,nums))print(squares)# [1, 4, 9, 16, 25]3.3 与 filter 结合# 筛选出偶数nums[1,2,3,4,5,6]evenslist(filter(lambdax:x%20,nums))print(evens)# [2, 4, 6]3.4 与 reduce 结合fromfunctoolsimportreduce# 计算列表累加和nums[1,2,3,4,5]totalreduce(lambdaa,b:ab,nums)print(total)# 154. 进阶技巧4.1 多参数与默认参数# 多参数arealambdaw,h:w*hprint(area(4,5))# 20# 默认参数greetlambdanameWorld:fHello,{name}!print(greet())# Hello, World!print(greet(Python))# Hello, Python!4.2 在排序中指定多条件students[{name:Alice,score:88},{name:Bob,score:92},{name:Cathy,score:88},]# 先按分数降序再按姓名升序students.sort(keylambdas:(-s[score],s[name]))print(students)4.3 条件表达式# 使用三元表达式实现简单判断max_funclambdaa,b:aifabelsebprint(max_func(10,20))# 205. 注意事项与常见误区5.1 不要滥用 LambdaLambda 适合简单表达式。如果逻辑复杂应使用普通函数以保证可读性# 不推荐逻辑过于复杂resultlambdax:x*21ifx0elsex*3-1ifx0else0# 推荐使用普通函数defcomputer(x):ifx0:returnx*21elifx0:returnx*3-1return05.2 只能包含单个表达式Lambda 内部不能包含赋值语句、多行语句或return关键字它只能是一个表达式。5.3 避免在循环中捕获变量# 陷阱所有 lambda 都捕获同一个变量funcs[lambda:iforiinrange(3)]print([f()forfinfuncs])# [2, 2, 2]# 解决使用默认参数绑定当前值funcs[lambdaii:iforiinrange(3)]print([f()forfinfuncs])# [0, 1, 2]
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进