python命名空间(namespace)简单介绍

  • Post category:Python

让我们来详细解释一下“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 。

以上就是命名空间的概念和两个示例的详细讲解,希望可以对你有所帮助。