双面间谍:不同作用域下的 locals() 函数

news/2024/10/30 19:24:32/

文章目录

  • 参考
  • 描述
  • locals() 函数
  • 双面间谍:locals()
      • 静态 locals()
          • 获取最新变化
          • 保持同步
      • 动态 locals()

参考

项目描述
Python 官方文档https://docs.python.org/zh-cn/3/
搜索引擎Google 、Bing

描述

项目描述
PyCharm2023.1 (Professional Edition)
Python3.10.6

locals() 函数

在 Python 中,locals() 是一个 内置函数,用于返回 当前作用域的命名空间的字典,该字典存储了当前作用域中定义的所有全局变量和函数。
locals() 函数返回一个字典,其中包含局部作用域中的变量名及其对应的值。这个字典可以用于 访问、修改和删除 当前作用域中的变量。

对此,请参考如下示例:

# 当在全局作用域中调用 locals() 函数时,
# 该函数将返回全局命名空间字典,与 globals()
# 返回的值相同。
print(locals() == globals())def func():# 当在函数中调用 locals() 函数时,# 该函数将返回其所在函数的局部命名空间字典。local_var = 'Hello World'print(locals())func()

执行效果

True
{'local_var': 'Hello World'}

双面间谍:locals()

静态 locals()

局部作用域下的 locals() 返回的是与局部作用域相关联的命名空间字典,该字典是静态的。这意味着,字典中的内容并不与实际命名空间中的变化保持同步。对此,请参考如下示例:

def func():first_locals = locals()# 此时局部命名空间中已注册 first_locals 变量# 但该变量并不会体现在 first_locals 中print(first_locals)a = 1# 此时局部命名空间中已注册 a 变量# 但该变量并不会体现在 first_locals 中print(first_locals)func()

执行效果

{}
{}
获取最新变化

在 Python 中,你可以通过在局部作用域中调用 locals() 来更新与局部命名空间相关联的字典,使其内容与局部命名空间中的内容保持一致。对此,请参考如下示例:

def func():first_locals = locals()print(first_locals)a = 1print(first_locals)# 调用 locals() 以更新与局部命名空间# 相关联的字典。locals()print(first_locals)func()

执行效果

{}
{}
{'first_locals': {...}, 'a': 1}
保持同步

为了时刻获取当前状态下局部命名空间中的内容,你应该总是使用 locals() 函数来获取与局部命名空间相关联的字典,而不是使用 locals() 的赋值结果。对此,请参考如下示例:

def func():print(locals())a = 1print(locals())func()

执行效果

{}
{'a': 1}

动态 locals()

全局作用域下的 locals() 返回的是与全局作用域相关联的命名空间字典,该字典是动态的(这一点与 Python 提供的 globals() 内置函数是相同的)。这意味着,字典中的内容时刻与实际命名空间中的变化保持同步。对此,请参考如下示例:

first_locals = locals()# 判断全局变量 a 是否存在于 first_locals 中
print('a' in first_locals)# 定义全局变量 a
a = 1print('a' in first_locals)

执行效果

False
True

http://www.ppmy.cn/news/83106.html

相关文章

数据可视化-Echarts

Echarts Echarts是一个基于JavaScript的开源可视化库&#xff0c;可以用于创建各种复杂的数据可视化图表。Echarts提供了一系列API&#xff0c;可以方便地操作数据和图表&#xff0c;实现各种数据可视化效果。 绘制图表的步骤 <!DOCTYPE html> <html><head&g…

Linux——进程和计划任务管理

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。 个人主页&#xff1a;小李会科技的…

冯诺依曼体系结构详解

一.冯诺伊曼体系结构的概念&#xff1a; 约翰冯诺依曼&#xff08;John von Neumann&#xff0c;1903.1.28-1957.2.8&#xff09;&#xff0c;美籍匈牙利数学家&#xff0c;计算机科学家&#xff0c;物理学家。是20世纪最重要的数学家之一&#xff0c;后来被称为计算机之父。 后…

el-select嵌套el-select或者嵌套el-time-picker点击选择内层的日期时间导致外侧的el-option收回问题的解决办法

element-plus/el-select嵌套el-select或者嵌套el-time-picker点击选择内层的日期时间导致外侧的el-option收回问题的解决办法 由于业务需求页面中用到了如下代码 <el-select v-model"domains" placeholder"选择生效时间" visible-change"visChang…

python flask p5.js mysql 实现数据库查询并网页显示数据(后附完整代码分享)

tips&#xff1a;不涉及session&#xff0c;是纯简单数据共享 实现步骤&#xff1a; 第一步&#xff1a;搭建框架第二步&#xff1a;创建数据库第三步&#xff1a;设计前端网页第四步&#xff1a;后端实现存储数据库整体实现需要的代码文件: 第一步&#xff1a;搭建框架 首先f…

正则集合(持续更新)

1.手机号&#xff1a; /^1[3|4|5|6|7|8|9][0-9]\d{8}$/

微服务: Seata AT springCloud整合分布式事务以配置方式(中篇)

目录 上篇: 安装seata 并启动成功的传送门 1. 前言: 2. springCloud 使用seata at 的步骤如下 第一步 查看springCloud版本 第二步添加maven依赖 第三步 添加yml配置 第四步: 配置数据源(druid) 第五步 修复一个警告 第六步: 启动后 看看日志是否成功 上篇: 安装seat…

【软考】系统集成项目管理工程师 第3章 信息系统集成专业技术知识

文章目录 3.1 信息系统建设3.1.1 信息系统的生命周期3.1.2信息系统开发方法 3.3 软件工程3.3.1软件需求分析与定义3.3.2软件设计、测试与维护3.3.3软件质量保证及质量评价3.3.4软件配置管理3.3.5软件过程管理3.3.6软件开发工具3.3.7软件复用 3.4 面向对象系统分析与设计3.4.1面…