Python : locals() 和 globals()

原文

Python 两个内置函数,提供基于字典的访问局部和全局变量的方式

首先理解 python 中名字空间的概念。Python 使用名字空间的东西来记录变量的轨迹。名字空间是一个字典,键表示变量的名字,值为变量的值。名字空间可以像 python 字典一样访问

每一个函数都有自己的名字空间,叫做局部名字空间,记录函数的变量,包括函数的参数和局部定义的变量。每一个模块具有自己的名字空间,叫做全局名字空间,记录了模块的变量,包括函数,类,其他导入的模块,模块机的变量和常量。还有内置的名字空间,任何模块都可以访问,存放着内置的函数和异常。

当一行代码要使用变量 x 的值时,Python 会到所有可以用的名字空间去寻找变量,按照如下顺序:

  1. 局部名字空间,特指当前函数或类的方法。如果函数定义了一个局部变量 x ,Python 将使用这个变量,然后停止搜索
  2. 全局名字空间,特指当前的模块。如果模块定义了一个名为 x 的变量,函数或者类,Python 将使用这个变量然后停止搜索
  3. 内置名字空间,对每一个模块都是全局的,作为最后的尝试,Python 将假设 x 是内置函数或者变量


如果在这些名字空间都找不到,会引发一个 NameError 异常,同时传递 There is no variable named 'x' 这样一个信息

locals 是只读的,所以不可以通过修改 locals 来修改,增加变量,globals 不是只读的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值