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 程序,并避免遇到变量冲突等问题。