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

11. 名称空间

一、什么是名称空间

  名称空间(namespace)指的是变量存储的位置,是对栈区的划分。每一个变量都需要存储到指定的名称空间中。每一个作用域都会有一个它对应的名称空间。名称空间主要分为 内置名称空间全局名称空间局部名称空间 三种。名称空间实际上就是一个字典,是一个专门用于存储变量的字典。

  • 内置名称空间 用来保存 Python 解释器内置的名字。内置名称空间 在 Python 解释器启动时产生,在 Python 解释器关闭时销毁。
  • 全局名称空间 用来保存 全局变量(不是函数内定义的名字)。全局名称空间 在 Python 文件执行时产生,在 Python 文件运行完毕后销毁。
  • 函数名称空间 用来保存 函数中的变量(在调用函数时,运行函数体代码过程中产生的函数内的名字)。局部名称空间 在调用函数时存活,函数调用完毕后销毁。
def func():
    print(x)

x = 10

func()

名称空间的加载顺序:内置名称空间 > 全局名称空间 > 局部名称空间;

名称空间的销毁顺序:局部名称空间 > 全局名称空间 > 内置名称空间;

名字的查找优先级:当前所在的位置向上一层一层查找;

二、获取名称空间

  我们可以使用 locals() 函数来获取当前作用域的名称空间。

  如果在全局作用域中调用 locals() 函数,则获取全局名称空间;如果在函数作用域中调用 locals() 函数,则获取函数的名称空间。locals() 函数返回的是一个字典。我们可以向字典中添加一个 key-value,这相当于在全局中创建了一个变量,但是不建议这样做。

a = 10

scope = locals()
print(scope,'\n')
print(type(scope), '\n')

# 向字典中添加key-value就相当于在全局中创建了一个变量
scope['b'] = 10
print('b = ',b)

  在函数内部调用 locals() 会获取函数的名称空间。

def func():
    a = 10
    scope = locals()
    print(scope,'\n')
    print(type(scope),'\n')

func()

  我们可以使用 globals() 函数在任意位置获取全局名称空间。

a = 10

def func():
    b = 10
    global_scope = globals()
    print(global_scope, '\n')
    print(type(global_scope), '\n')
    print(global_scope['a'])

    global_scope['a'] = 30

func()
print(a)

http://www.kler.cn/a/418551.html

相关文章:

  • 深度学习基础2
  • S4 UPA of AA :新资产会计概览
  • Wireshark常用功能使用说明
  • 日志与线程池
  • 分布式FastDFS存储的同步方式
  • PostgreSQL的学习心得和知识总结(一百五十八)|在线调优工具pgtune的实现原理和源码解析
  • 深入解析 MySQL 启动方式:`systemctl` 与 `mysqld` 的对比与应用
  • 【iOS】《Effective Objective-C 2.0》阅读笔记(一)
  • 力扣103.二叉树的锯齿形层序遍历
  • git clone超大仓库时报错:fatal: early EOF
  • centos挂载ntfs或exFAT格式硬盘
  • 系统监控——分布式链路追踪系统
  • AJAX一、axios使用,url组成(协议,域名,资源路径)查询参数和化简,错误处理,请求/响应报文,状态码,接口文档,
  • 动态规划(c基础)
  • 【大数据学习 | Spark调优篇】Spark之内存调优
  • 深度学习基础3
  • 匿名发帖/匿名论坛功能设计与实现(编辑发帖部分)
  • 乌班图单机(不访问外网)部署docker和服务的方法
  • 【React】全局状态管理(Context, Reducer)
  • 在Window10或11系统中同时安装 JDK8 和 JDK11
  • 使用Docker Compose安装WordPress(ARM/x86架构)
  • 六、Python —— 函数
  • CondaValueError: Malformed version string ‘~‘: invalid character(s).
  • 猜一个0到10之间的数字 C#
  • HHO-CNN-BiGRU-Attention哈里斯鹰优化算法卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比
  • 深度学习周报(11.25-12.1)