📜  Python命名空间和范围(1)

📅  最后修改于: 2023-12-03 15:04:38.186000             🧑  作者: Mango

Python命名空间和范围

在Python中,命名空间是一个重要的概念。命名空间是一种将名称与对象相关联的方法。简而言之,命名空间是一个字典,其中名称是键,对象是值。

# 示例
x = 5
print(globals())
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'x': 5}

该示例中,globas()返回给定上下文中定义的全局名称和其对应的值的字典。

在Python中,有四个命名空间:

  • 内置命名空间:包含Python中内置的名称,例如int、float等。这些都是内置名称。
  • 全局命名空间:在程序的任何位置定义的名称,但不在函数中,被称为全局名称。这些名称可以在程序的整个范围内访问。全局名称在模块第一次被导入时创建,并在Python解释器退出时销毁。
  • 局部名称空间:由调用函数时的参数和任何在函数中定义的名称组成。例如,在函数内部声明的函数,其名称为函数的本地名称。
  • 表达式名称空间:这是在Python表达式中使用的名称。

这种阶层结构称为范围(Scope)。在Python中,命名空间之间的范围用于找到名称的真实对象。例如,在函数内部定义的变量始终比全局定义的变量具有更高的优先级。

# 示例
x = 1 # 全局变量

def foo():
    x = 2 # 局部变量
    print(x) # 输出2

foo()
print(x) # 输出1

在这个示例中,函数foo()定义了一个局部变量x。当foo()被调用时,它打印该局部变量x的值(即2)。在打印该变量后,foo()结束,并且局部变量x在该函数内部被删除。然后,全局变量x的值被打印(值为1)。

总结:

  • 命名空间是在名称和对象之间进行关联的方法。
  • Python有四个命名空间:内置、全局、局部和表达式。
  • 命名空间也是Python范围的一部分,用于决定名称的真实对象。对象的查找顺序是:局部、全局和内置。
  • 局部变量始终优先于全局变量。```