在 Python 中,命名空间(Namespace)和作用域(Scope)是与变量和对象相关的两个重要概念。

命名空间:

命名空间是一个从名称到对象的映射,用于查找变量名的位置。Python 中有多个命名空间,其中最重要的有:

1. 内置命名空间(Built-in Namespace): 包含了内置的函数和异常等。
2. 全局命名空间(Global Namespace): 包含了在模块级别定义的变量和函数。
3. 局部命名空间(Local Namespace): 包含了在函数或类中定义的变量和函数。

作用域:

作用域定义了变量名的可见性和生命周期。Python 中主要有以下作用域:

1. 局部作用域(Local Scope): 在函数内部定义的变量拥有局部作用域,只在函数内部可见。
2. 嵌套作用域(Enclosing Scope): 在嵌套的函数中,内部函数可以访问外部函数的变量,但外部函数不能访问内部函数的变量。
3. 全局作用域(Global Scope): 在模块级别定义的变量拥有全局作用域,整个模块内都可见。
4. 内置作用域(Built-in Scope): 包含了 Python 的内置函数和异常等,是最高级别的作用域。

LEGB 规则:

在 Python 中,变量的查找顺序遵循 LEGB 规则:

  •  Local Scope: 在函数内部定义的局部变量。

  •  Enclosing Scope: 包含了非全局(非内置)嵌套函数的作用域。

  •  Global Scope: 在模块级别定义的变量。

  •  Built-in Scope: 包含了内置的函数和异常。


示例:
x = 10  # 全局变量

def outer_function():
    y = 20  # outer_function 的局部变量

    def inner_function():
        z = 30  # inner_function 的局部变量
        print(x + y + z)  # 可以访问全局、外部函数的变量

    inner_function()

outer_function()

在这个示例中,inner_function 可以访问全局变量 x、外部函数 outer_function 的局部变量 y,以及自身的局部变量 z。

理解命名空间和作用域有助于更好地组织代码,防止变量冲突,以及理解变量在不同位置的可见性。


转载请注明出处:http://www.zyzy.cn/article/detail/13278/Python3