Python 命名空间是什么?

Python 命名空间是什么?

在学习 Python 编程语言过程中,我们经常会听到“命名空间”的概念。那么什么是 Python 命名空间呢?

阅读更多:Python 教程

什么是命名空间?

简单来说,命名空间就是变量名和函数名的存储空间。在 Python 中,每个变量和函数都必须被赋予名字,而这个名字被储存在特定的命名空间中。命名空间可以看作是一个映射,将每个名字映射到相应的对象。

Python 命名空间

Python 中有四种不同的命名空间:localglobalenclosedbuilt-in 命名空间。

1. Local 命名空间

在函数内部使用的变量和函数名位于 local 命名空间中。这个命名空间只有在函数被调用时才会创建,并且在函数执行结束时销毁。

def example_func():
    x = 1
    print(x)

example_func()

上面的代码中 x 就是在 example_func 函数内部定义的,在函数执行时创建了 local 命名空间,将 x 加入其中。当函数执行结束时, local 命名空间也被销毁,x 的值也随之消失。

2. Global 命名空间

定义在模块级别的变量和函数名位于 global 命名空间中。这个命名空间在 Python 解释器启动时创建,并且一直存活到解释器关闭。

x = 1

def example_func():
    print(x)

example_func()

上面的代码定义了一个全局变量 x,位于 global 命名空间中。当 example_func 被调用时,x 能在函数内部访问,因为在函数内部可以找到 global 命名空间中该变量的值。

3. Enclosing 命名空间

在内部函数中定义的变量和函数名位于 enclosing 命名空间中。如果内部函数是动态地定义,那么 enclosing 命名空间不会一直存在,只有当这个内部函数被引用的时候才会创建。

def example_func():
    x = 1
    def inner_func():
        print(x)   
    inner_func()

example_func()

上面的代码中,inner_func 就是定义在 example_func 中的内部函数。x 位于 enclosing 命名空间中,因此 inner_func 可以在内部访问到该变量的值。

4. Built-in 命名空间

这是 Python 解释器默认提供的命名空间,其中包含了常见的变量和函数,例如 intfloatrange 等。

命名空间搜索顺序

当我们在 Python 代码中引用变量或函数名时,解释器会按照一定的顺序搜索四种不同的命名空间,直到找到对应的名字,或者发现该名字不存在。

Python 中的命名空间搜索顺序如下:

  • local 命名空间
  • enclosing 命名空间(如果有)
  • global 命名空间
  • built-in 命名空间

如果在任何一个命名空间中都找不到该变量或函数名,那么解释器就会引发 NameError 异常。

一个示例

下面的代码演示了 Python 的命名空间搜索过程:

x = 1

def example_func():
    x = 2
    def inner_func():
        x = 3
        print(x)
    inner_func()
    print(x)

example_func()

print(x)

输出结果为:

3
2
1

首先,我们在 global 命名空间中定义了一个变量 x,其值为 1。在调用 example_func 函数时,创建了 local 命名空间,并将 x 值设为 2。在调用 inner_func 函数时,创建了 enclosing 命名空间,并将 x 值设为 3。所以在 inner_func 中打印出来的值为 3。在离开 inner_func 后,控制权回到 example_func 函数,并在 local 命名空间中找到 x 的值为 2。因此第二个打印结果为 2。最后在 global 命名空间中找到 x 的值为 1,因此第三个打印结果为 1

结论

Python 命名空间是变量名和函数名的存储空间。在 Python 中有四种不同的命名空间,分别是 local、global、enclosing 和 built-in 命名空间。在 Python 中,当我们在代码中引用变量或函数名时,解释器会按照一定的顺序搜索四种不同的命名空间,直到找到对应的名字,或者发现该名字不存在。了解命名空间的概念及其搜索原理对于理解 Python 语言非常重要。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程