23 详解闭包

embedded/2025/3/15 16:46:43/

1. 闭包的定义

闭包是一个函数对象,它可以访问其所在作用域之外的变量。具体来说,闭包是由函数及其相关的引用环境组合而成的实体。

2、闭包的特点:

  • 必须有一个内嵌函数(函数中定义的函数)
  • 内嵌函数必须引用外部函数中的变量
  • 外部函数必须返回内嵌函数
def outer_function(x):# 外部函数的变量y = 10def inner_function():# 内部函数可以访问外部函数的变量return x + yreturn inner_function# 创建闭包
closure = outer_function(5)
# 调用闭包
result = closure()  # 结果为15

3、nonlocal关键字

nonlocal的作用

nonlocal用于在内部函数中修改外部函数的变量。它告诉Python这个变量不是局部变量,也不是全局变量,而是外部嵌套函数的变量。

#nonlocal 关键字
# 使用nonlocal关键字来修改外部函数的变量
def counter():count = 0def increment():nonlocal count  # 声明count是外部函数的变量count += 1      # 修改外部函数的变量return countreturn increment# 使用闭包
c = counter()
print(c())  # 输出: 1
print(c())  # 输出: 2
print(c())  # 输出: 3

不使用nonlocal关键字报错如下:

# 不使用nonlocal关键字
def counter_without_nonlocal():count = 0def increment():# 如果不使用nonlocalcount = count + 1  # 这会报错!return countreturn increment# 这会引发UnboundLocalError错误
c = counter_without_nonlocal()
print(c())  # 输出: 1
print(c())  # 输出: 2
print(c())  # 输出: 3

4. nonlocal vs global

global_var = 0def outer():outer_var = 1def inner():global global_var   # 修改全局变量nonlocal outer_var  # 修改外部函数的变量global_var += 1outer_var += 1print(global_var,outer_var)return innero=outer() 
o()
o()
o()打印结果
1 2
2 3
3 4


http://www.ppmy.cn/embedded/172814.html

相关文章

OpenCV图像加权函数:addWeighted

1 addWeighted函数 在OpenCV 里,addWeighted 函数的作用是对两个图像进行加权求和,常用于图像融合、图像过渡等场景。函数如下: cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])2 参数解释 src1:第一个输入图…

Qt-开发设置窗体透明效果

一、前言 在音频开发中,窗体多半为半透明、圆角窗体,如下为Qt 5.5 VS2013实现半透明方法总结。 二、半透明方法设置 1、窗体及子控件都设置为半透明 1)setWindowOpacity(0.8);//参数范围为0-1.0,通过QSlider控件做成透明度控制条…

证券交易系统的流程

证券交易系统的流程通常包括账户开立、资金存入、下单交易、撮合成交、清算交割和资金划转等环节。以下是证券交易的完整流程,按照时间顺序排列: 一、开户 在进行证券交易前,投资者需要开设以下账户: 证券账户(由证券…

Mac M1 切换Java版本

下载地址:Java 8, 11, 17, 21, 23 Download for Linux, Windows and macOS 安装 Java 8:下载完成后,双击 .dmg 文件,接着在打开的窗口中双击 .pkg 文件,按照安装向导完成安装。 vim ~/.bashrcexport JAVA_8_HOME/Lib…

使用服务器如何DNS呢

莱卡云服务器 DNS 配置指南 一、配置云服务器本地 DNS ‌修改网络配置文件‌ ‌Ubuntu/Debian‌: bashCopy Code sudo nano /etc/network/interfaces # 添加或修改 DNS 配置 dns-nameservers 8.8.8.8 8.8.4.4 *(保存后重启网络服务&#xf…

空洞卷积(膨胀卷积)(Dilated Convolution / Atrous Convolution)

膨胀卷积的基础操作图解: 卷积之后的尺寸公式: WH 是输入尺寸 Fw​Fh​ 是卷积核尺寸 P 是填充大小 S 是步长 R 是膨胀率 ⌊x⌋ 表示向下取整 实例(膨胀率不同): 输入尺寸:W8H8 卷积核尺寸&#xff…

NFC碰一碰发视频-nfc碰一碰发视频拓客系统 实体商家碰一碰发视频引流获客

服务器配置确认:根据预计的用户访问量和系统负荷,选择适当的服务器规格。 环境设置:在选定的服务器上安装操作系统、数据库管理系统及所需的依赖库,例如Linux发行版、MySQL数据库和Nginx服务器软件。 代码获取:从官方…

硬件工程师入门教程(四)

1.比较器是什么 比较器有两个输入信号V和V-&#xff1b;以及一个输出信号Vout 当V>V-时&#xff0c;Vout为高电平&#xff1b;&#xff08;约等于Vcc&#xff09;当V<V-时&#xff0c;Vout为低电平&#xff1b;&#xff08;约等于GND&#xff09; 2.比较器什么时候加上…