当前位置: 首页 > web >正文

python官网的lambda知识点总结

本篇文章是对python官网4.9.6. Lambda Expressions的知识点总结

lambda a, b: a+b
(1) lambda 在函数定义里作为返回函数,类似嵌套函数,使用函数定义里的变量的引用。
(2) lambda 在函数调用时作为参数。

1. ​​"语法糖"的本质​

Lambda函数本质上是一种简化写法的函数定义方式,与def定义的普通函数在核心功能上完全等价。比如:

# 普通函数
def add(x):return x + 1# Lambda等价写法
add_lambda = lambda x: x + 1

两者的底层实现和执行逻辑完全相同,唯一的区别是Lambda没有显式的函数名(匿名函数),且只能包含单个表达式。


2. ​​与嵌套函数共享变量作用域​

Lambda和嵌套函数(Nested Function)一样,可以访问​​定义时所在的作用域​​(enclosing scope)中的变量,这种行为称为​​闭包(Closure)​​。

示例:引用外层变量
def outer():y = 10inner_lambda = lambda x: x + y  # Lambda引用了外层变量yreturn inner_lambda(5)print(outer())  # 输出 15

这里,Lambda在定义时捕获了外层变量y的值,即使outer()函数执行完毕后,y的值仍被保留在闭包中供Lambda使用。


3. ​​变量绑定的时机​

Lambda捕获的是变量的​​引用​​,而非当前值。如果外层变量后续被修改,Lambda会使用最新的值(称为"延迟绑定")。

示例:延迟绑定问题
funcs = []
for i in range(3):funcs.append(lambda x: x + i)  # 所有Lambda都引用同一个变量iprint(funcs[0](0))  # 输出 2(i的最终值是2)
print(funcs[1](0))  # 输出 2

所有Lambda共享变量i,最终都使用了循环结束后的值2。若需捕获循环中的瞬时值,需通过默认参数立即绑定:

funcs = []
for i in range(3):funcs.append(lambda x, i=i: x + i)  # 用默认参数立即绑定当前i的值

4. ​​与嵌套函数的等价性​

Lambda和嵌套函数在作用域规则上完全一致。以下两种写法等价:

# 嵌套函数
def outer():y = 10def inner(x):return x + yreturn inner# Lambda等价写法
def outer():y = 10return lambda x: x + y

5. ​​lambda 在函数调用时作为参数​

lst = [(0,"zoo"), (3,"cat"),(2,"banana")]
lst.sort(key=lambda x:x[0])
print(lst)
# 结果 [(0, 'zoo'), (2, 'banana'), (3, 'cat')]
lst.sort(key = lambda x:x[1])
print(lst)
# [(2, 'banana'), (3, 'cat'), (0, 'zoo')]

关键总结

  • ​语法糖​​:Lambda只是简化了单表达式函数的写法,没有功能差异。
  • ​作用域规则​​:Lambda和嵌套函数共享相同的作用域链,可访问定义时的外层变量。
  • ​变量绑定​​:捕获的是变量的引用,需注意延迟绑定可能带来的问题。
  • ​函数参数​​: 作为函数里参数。

理解这些机制,可以避免因变量作用域引发的常见Bug,并正确利用闭包特性编写简洁高效的代码。

http://www.xdnf.cn/news/10117.html

相关文章:

  • Linux分区与文件系统选择:EXT4与XFS深度解析
  • 老旧设备数据采集破局 AI图像解析如何让质检LIMS系统焕发新生
  • c++数据结构10——map结构详解
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(30):みます
  • 边缘计算网关在管网压力远程调控中的通信协议配置
  • Spine工具入门教程2之导入
  • 第十九章 正则表达式
  • Predixy的docker化
  • Python训练营打卡Day40
  • Golang——2、基本数据类型和运算符
  • MySQL-8.0.42 主从延迟常见原因及解决方法
  • PDF文件转换之输出指定页到新的 PDF 文件
  • java类与类之间的关系
  • 黑马k8s(十七)
  • KVM——CPU独占
  • 几个易混淆的不定积分公式记忆方法
  • 如何解决MySQL Workbench中的错误Error Code: 1175
  • USB充电检测仪-2.USB充电检测仪硬件设计
  • 写作-- 复合句练习
  • Python Day38
  • 特伦斯 S75 电钢琴:重塑音乐感知,臻享艺术之境
  • ADUM3201ARZ-RL7在混合动力电池监控中的25kV/μs CMTI与系统级ESD防护设计
  • Tornado WebSocket实时聊天实例
  • 58-dify案例分享-用 Dify 工作流 搭建数学错题本,考试错题秒变提分神器-同类型题生成篇
  • PHP学习笔记(十一)
  • 顶会新热门:机器学习可解释性
  • VScode-使用技巧-持续更新
  • 鸿蒙OSUniApp智能商品展示实战:打造高性能的动态排序系统#三方框架 #Uniapp
  • Kotlin JVM 注解详解
  • MySQL之数据库的内嵌函数和联合查询