让我们来详细解释一下“python命名空间(namespace)简单介绍”的内容。
命名空间概念
在 Python 中,命名空间是一个对象(包含变量、函数等),它们组成了一个存储区域,不同命名空间下的变量名和函数名不会发生冲突或重名。Python 解释器会根据名称空间的顺序查找变量。通俗地说,Python 会按照指定的规则名字找出变量所属的范围。如下所述,它们可以是:
- 内置名称空间,这个名称空间包含了 Python 中内置的函数和模块。它们在解释器启动时被初始化,并且通常不被删除。
- 全局名称空间,它与当前模块有关联,存储着全局变量,主模块的名称空间就是全局名称空间。
- 局部名称空间,它是一个函数的名称空间,包含着局部变量、函数的参数等信息。
参考资料:
1. Python 命名空间和作用域
2. Python 中的名称和命名空间
示例一
a = 1 # 这是全局名称空间,包含变量 a
def func():
b = 2 # 这是 func() 函数的名称空间,包含变量 b
print(a) # 输出 a 变量的值,即 1
print(b) # 报错,b 不存在当前命名空间中
解释:变量 a 和函数 func 以及里面的变量 b 分别属于不同的名称空间,a 属于全局命名空间,而 b 属于 func 函数的局部变量空间。在调用函数之前,b 是不存在的,因此尝试访问该变量会导致 NameError。
示例二
a = 1 # 这是全局名称空间,包含变量 a
def func():
a = 2 # 这是 func() 函数的名称空间,包含变量 a
print(a) # 输出局部变量 a 的值,即 2
func() # 调用函数,输出 2
print(a) # 输出全局变量 a 的值,即1
解释:虽然全局变量 a 和函数 func 里面的局部变量 a 的名称相同,但实际上是属于不同的命名空间。在函数内部使用变量 a 时,它优先选择了局部变量 a,因此输出的是 2,而全局变量 a 的值不会被修改,因此在函数调用之后输出的仍然是 1 。
以上就是命名空间的概念和两个示例的详细讲解,希望可以对你有所帮助。