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

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

Python中的命名空间和范围

在Python中,命名空间是一个用于存储变量名称和它们所引用对象的字典。Python拥有不同类型的命名空间,它们具有不同的分配方式和生命周期。

1. 全局命名空间

全局命名空间是从Python解释器启动时创建的,被认为是最顶层的命名空间,包括所有默认定义的函数和变量名称,如print()len()str等。它存在于整个解释器的生命周期中,只有在解释器被终止时才会被删除。

全局命名空间可以通过globals()函数来访问和操作。例如,我们可以通过以下代码来获取所有全局变量的名称和值:

for name, value in globals().items():
    print(name, value)
2. 局部命名空间

局部命名空间是在函数被调用时创建的,当函数调用结束时,所有局部变量和函数定义的命名空间也会被删除。

局部命名空间可以通过locals()函数来访问和操作。例如,我们可以通过以下代码来获取所有局部变量的名称和值:

def func():
    name = 'Bob'
    age = 35
    for k, v in locals().items():
        print(k, v)

func()
3. 内置命名空间

内置命名空间包含了所有的Python内置函数和异常,可以通过__builtins__访问。例如,我们可以使用以下代码打印所有内置函数和异常的名称:

for name in dir(__builtins__):
    print(name)
作用域

Python中,每个函数、类和模块都有自己的作用域(Scope),作用域规定了变量可被访问的范围。

1. 局部作用域

局部作用域指的是在函数内定义的变量,并且只能在函数内部访问。例如:

def func():
    name = 'Bob'
    print(name)

func()

在上面的例子中,变量name只在func()函数内部可见,如果在函数外部访问该变量,将会抛出NameError异常。

2. 全局作用域

全局作用域指的是在模块顶层定义的变量,可以在模块内的任何位置访问。例如:

name = 'Bob'

def func():
    print(name)

func()

在上面的例子中,变量name在模块顶层定义,因此在func()函数内部也可以访问。

3. 内置作用域

内置作用域指的是Python内置函数和异常的作用域,可以在任何地方访问。例如:

def func():
    print(len([1, 2, 3]))

func()

在上面的例子中,len()函数是一个内置函数,可以在函数内部访问。

总结

命名空间和作用域是Python中非常重要的概念,程序员必须深入理解它们,以充分利用Python的强大功能。在Python中,有三种类型的命名空间:全局命名空间,局部命名空间和内置命名空间。作用域规定了变量可被访问的范围,包括局部作用域、全局作用域和内置作用域。