Python3 命名空间和作用域
Python3命名空间和作用域
在开始深入学习 Python3 之前,必须了解Python 命名空间和作用域的概念。
Python3 中的命名空间是一个容器,存储程序中创建的对象。我们可以将其看做是一张表,其中存储了对象的名称和实际引用。Python中主要存在以下命名空间:
- built-in namespace(内建命名空间):Python 解释器默认加载的这个命名空间中,包括了所有内建函数,比如 str()、int() 等。
- global namespace(全局命名空间):指的是文件级别的命名空间,即一个模块中的全局命名空间,从模块被导入开始创建。
- local namespace(局部命名空间):是在一个函数调用中创建的,用于用于存储局部变量。
Python中存在四种作用域,可以帮助我们理解和控制程序执行流程。作用域规定了一个变量的可见范围和生命周期范围。
- L(Local): 局部作用域,在函数或者类中定义。
- E(Enclosing):闭包函数外的函数内部。
- G(Global): 全局作用域,在模块中定义。
- B(Built-in):内建作用域,Python 解释器会自动向其添加内建函数的命名空间。
Python解释器会按照 L - E - G - B 的顺序查找变量。也就是说,如果在局部作用域 L 找不到相应的变量,Python解释器就会依次到上一层的 E 搜索变量,接着依次到 G(全局) 和 B(内建),直到找到变量为止。如果最后都没有找到变量,Python解释器会抛出 NameError 的异常。
作用域也可以嵌套,子作用域可以使用父作用域中的变量,但是父作用域无法使用子作用域中的变量。
以下是 Python3 命名空间和作用域的示例代码:
#全局变量
d = 10
def testFunc():
#局部变量
a = 5
global d
d = d + a #调用全局变量并修改
print("a:", a)
print("d:", d)
testFunc()
print("d in global:", d) #此处输出 d=15
以上代码中,有一个全局变量 d=10,在函数testFunc()
中首先定义了一个局部变量 a=5,最后通过global d
语句声明要修改全局变量 d 的值,最终输出 d=15。使用global
关键字可以声明在函数体内要使用全局变量。
总结:掌握 Python3 命名空间和作用域的概念是编写 Python 程序的关键之一。了解它们的应用可以避免变量命名冲突,并为程序提供一个清晰的、有效的结构。