浅谈Python类命名空间,Python变量的作用域
名称空间,称为命名空间,是名称和对象之间的映射。它通常以字典的形式存储变量名与其引用的变量值之间的映射关系。
命名空间是变量名的集合。当程序解析对应于变量名的值时,它搜索整个名称空间。所以,了解和掌握命名空间,有助于我们理解程序执行时的搜索规则,写出预期的代码。
在同一个名称空间中,变量名是惟一的,就像字典的键一样。只有这样才能唯一解析出正确的值。不同的名称空间是独立的,不同的名称空间中允许变量名的重复。
在python中,有三种名称空间。根据搜索优先级,它们排列如下。
局部命名空间,每个函数的变量和参数形成的空间,全局命名空间,模块级变量。注意,python脚本也是模块内置命名空间,python内置常量,函数形成的空格。对于变量,首先查找其函数的本地命名空间。如果找不到,就转到下一个更高级别的全局名称空间。如果您还没有找到它,请查找内置名称空间。如果连内置的命名空间都找不到,那就是找不到。
这些是默认的名称空间查找规则。关于名称空间需要记住的一点是,名称空间在定义时就已经生成了。例子如下
a=2
def test1():
.打印(一份)
.
测试1()
2
def test2():
.a=1
.打印(一份)
.
测试2()
回溯(最近一次呼叫):
模块中文件 stdin 的第1行
文件 stdin ,第2行,在test2中
BoundLocalError:为什么在赋值test2函数之前引用的局部变量“a”没有在全局命名空间中使用a?原因是在定义test2函数时,包含了变量A的赋值语句,以至于程序认为变量A已经存在于函数的局部命名空间中,而实际上并没有,全局命名空间中只存在变量A,于是程序抛出异常。
上述程序的初衷是对全局命名空间的进行操作。为了实现这一点,您需要在test2函数中更改A的名称空间。在python中,可以通过以下两个关键字修改变量并更改它们的名称空间
全局非局部
这两个关键字放在变量名的开头,用于修改变量,也称为绑定变量。全局将变量绑定到全局命名空间,非局部将变量绑定到非局部命名空间,即全局和局部之间的命名空间。绑定后,将在相应的名称空间中直接搜索它们。上面的test2函数修改如下
a=2
def test2():
.全球a
.a=1
.
测试2()
a
通过global关键字,将A绑定到全局命名空间,这样程序就会在全局命名空间中寻找A,从而达到我们的目的。因此,当我们要修改上层命名空间的变量时,我们需要使用全局和非局部关键字。
目标
—如果你喜欢,分享给你的朋友—
关注我们,解锁更多精彩内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。