详解python命名空间

  • Post category:Python

Python中的命名空间,可以理解为存储变量名和它们对于对象的映射关系的位置。每个命名空间都与一个范围相关联,范围可以是全局的(在整个程序中可用),也可以是局部的(在一个函数或一个模块中可用)。Python 有四种命名空间:built-in、全局(global)、局部(local)、非局部(nonlocal)。

Built-in命名空间

Built-in 命名空间包含 Python 中所有内置的函数和常量。Python 启动时该命名空间就被加载,程序中任何地方都可以使用这些函数和常量而无需导入。

以下代码示例展示了一个内置函数,在Python程序的任何地方都可以直接调用。

print("hello world")

Global命名空间

Global 命名空间用于存放全局变量和函数,在整个程序中都可以访问和修改它们。全局命名空间可以用于在不同的模块中共享变量和函数,因此在编写大型程序时,全局命名空间特别有用。

以下代码示例展示了如何创建和访问全局变量。

g = "global"

def foo():
    print(g)

foo()

Local命名空间

Local 命名空间包含在函数、方法或块中定义的变量、函数和参数等。它们仅在定义它们的区域中可见,也就是所谓的作用域。该命名空间在函数调用时创建,函数返回时销毁,因此当函数调用结束后,局部命名空间中的变量将不再可用。

以下代码示例展示了如何在函数中访问局部变量。

def foo():
    a = "local"
    print(a)

foo()

Nonlocal命名空间

Nonlocal 命名空间是 Python 3 中新增的命名空间,用于存储在函数或嵌套函数中的变量,它们对于内层嵌套函数而言具有“非局部性”,即内层嵌套函数可以访问并修改外层函数中的变量,不过当前仅仅支持对嵌套函数的操作,而不支持对全局的操作。

以下代码示例展示了如何在函数中访问nonlocal变量。

def outer():
    x = "local"

    def inner():
        nonlocal x
        print("before:", x)
        x = "nonlocal"            
        print("after:", x)

    inner()
    print("outer:", x)

outer()

以上就是 Python 命名空间的详细介绍了,我们必须熟悉和理解 Python 中的这些命名空间,这样我们才能更好的编写 Python 程序,并避免遇到变量冲突等问题。