目录

scope_namespace


Python中的作用域和命名空间是两个密切相关的概念。我们首先从命名空间开始,然后讨论作用域。

1. 命名空间 (Namespace):

命名空间是一个从名字到对象的映射。大部分的命名空间都是在Python字典中实现的。常见的命名空间类型有以下几种:

  • 局部命名空间:特定函数内部的命名空间。
  • 全局命名空间:模块级别的命名空间。
  • 内置命名空间:包含内置函数和异常名的命名空间。

2. 作用域 (Scope):

作用域是一个Python程序文本区域,从这个区域可以直接访问命名空间内的名字。作用域的种类有:

  • 局部作用域 (Local Scope):在函数内部。
  • 封闭作用域 (Enclosing Scope):包围其他作用域的作用域。这是对于嵌套函数而言的。
  • 全局作用域 (Global Scope):在模块顶层。
  • 内置作用域 (Built-in Scope):包含所有内置名字的作用域。

LEGB规则:

当在Python中引用一个名字时,Python会按照LEGB规则搜索这个名字:首先是局部作用域,然后是封闭作用域,接着是全局作用域,最后是内置作用域。

示例:

x = 10  # 全局变量

def outer_function():
    y = 5  # 封闭作用域变量
    
    def inner_function():
        z = 3  # 局部变量
        print(x, y, z)
        
    inner_function()

outer_function()

在上述代码中,inner_function可以访问所有三个变量:xyz,因为它遵循LEGB规则。

关键点:

  • global 关键字可以用于在函数内部声明变量为全局变量。
  • nonlocal 关键字可以用于在嵌套函数中指示变量来自封闭作用域。

这两个关键字都允许在更外层的作用域中修改变量。

希望这可以帮助您理解Python的作用域和命名空间!