返回

Python学堂:名字、作用域、名字空间,让你秒懂Python变量定义与作用域

后端

楔子

在探索Python虚拟机的过程中,我们发现了PyFrameObject中存在三个独立的名字空间:f_locals、f_globals、f_builtins。名字空间对于Python来说是一个非常重要的概念,本文将着重介绍Python名字、作用域和名字空间的概念,助你深刻理解Python变量的定义和作用域。

一、Python名字:变量的标识符

Python名字,即变量的标识符,用于标识变量在程序中的身份。标识符可以是字母、数字和下划线(_)的任意组合,但不能以数字开头。Python中的标识符是区分大小写的,这意味着a与A是两个不同的标识符。

二、Python作用域:变量的生存范围

Python作用域是指变量在程序中有效的范围。Python的作用域分为四种:

  1. 本地作用域: 变量在函数或方法内定义,其作用域仅限于该函数或方法内。

  2. 全局作用域: 变量在模块或脚本的顶层定义,其作用域为整个模块或脚本。

  3. 内建作用域: Python内建的变量,如True、False、None等,其作用域为整个Python程序。

  4. 封闭作用域: 函数或方法内部可以访问外部作用域的变量,这种现象称为封闭作用域。

三、Python名字空间:变量的存储空间

Python名字空间是变量的存储空间,它将变量名与变量值进行关联。Python中的名字空间分为三种:

  1. 本地名字空间: 存储本地作用域内的变量。

  2. 全局名字空间: 存储全局作用域内的变量。

  3. 内建名字空间: 存储内建作用域内的变量。

四、Python名字绑定:变量名与变量值的关联

Python名字绑定是指变量名与变量值之间的关联。当变量被赋值时,就会发生名字绑定。Python中的名字绑定分为两种:

  1. 静态名字绑定: 在编译时进行名字绑定,变量名与变量值在编译时就确定。

  2. 动态名字绑定: 在运行时进行名字绑定,变量名与变量值在运行时才确定。

五、Python名字查找:寻找变量值的路径

Python名字查找是指在程序中寻找变量值的过程。当变量被使用时,Python会按照一定的规则进行名字查找,直到找到变量值。Python中的名字查找规则如下:

  1. 本地作用域: 首先在本地作用域中查找变量名,如果找到,则返回变量值。

  2. 全局作用域: 如果在本地作用域中找不到变量名,则在全局作用域中查找变量名,如果找到,则返回变量值。

  3. 内建作用域: 如果在全局作用域中找不到变量名,则在内建作用域中查找变量名,如果找到,则返回变量值。

结语

Python名字、作用域和名字空间是Python变量的基本概念,理解这三个概念对于理解Python变量的定义和作用域至关重要。通过本文的介绍,相信你已经对Python名字、作用域和名字空间有了深入的了解。