在电脑程序设计中,作用域(scope,或译作有效范围)是名字(name)与实体(entity)的绑定(binding)保持有效的那部分计算机程序。不同的编程语言可能有不同的作用域和名字解析。而同一语言内也可能存在多种作用域,随实体的类型变化而不同。作用域类别影响变量的绑定方式,根据语言使用静态作用域还是动态作用域变量的取值可能会有不同的结果。(来自维基百科)
由于Python
动态语言所具备的特性,它的所有变量都是在赋值的时候生成的(没有单独的初始化过程)。而对于任意变量名的访问、操作都是在特定变量命名空间(namespace)中进行的。变量名所在的命名空间直接决定了它可以被访问到的范围,即作用域。Python
中的作用域主要分为以下几种:
- 局部作用域 函数每次调用都会创建一个局部作用域。所以,函数内部的变量名可以与外部变量重名,并且在函数内部覆盖外部的同名变量(除非用global关键字显示声明为外部变量)。
- 全局作用域 定义在
Python
文件层级的变量在全局作用域中。这里的全局指的是在整个Python
文件中,而不是包层级。该文件外,需要通过import
引入,方可使用。 - 嵌套作用域 在出现多层嵌套的情况下会出现。
- 内置作用域 通过
__builtin__
模块实现。
而对于Python
内部而言,变量的查找顺序是:
- 在函数内部查找,即
locals()
- 在文件内查找,即
globals()
- 在外层查找,即在
__builtin__
中查找