详解Python 中的命名空间、变量和范围
Python 中的命名空间、变量和范围
什么是命名空间?
首先,我们需要感知python中的名称(标识符)是什么。众所周知,在python中,一切都是对象。名称帮助我们访问底层对象。例如,当我们做作业时 a = 1
, 1
是存储在内存中的对象,a 是我们与之关联的名称。我们可以通过内置函数获取某个对象的地址(在 RAM 中), ID()
.让我们看看如何使用它。
a = 1
打印('id(1)=',id(1))
打印('id(a)=',id(a)) 输出: id(1) = 9801248
id(a) = 9801248
在这里,两者都指同一个对象 1
,所以他们拥有相同的id。
现在我们知道了名称是什么,我们可以继续讨论名称空间的概念。简单地说,命名空间是名称的集合。在 Python 中,您可以将命名空间想象为您定义的每个名称到相应对象的映射。不同的命名空间可以在给定时间共存,但完全隔离。当我们启动 Python 解释器时,会创建一个包含所有内置名称的命名空间,并且只要解释器运行,它就存在。这就是内置函数像 ID()
, 打印()
我们始终可以从程序的任何部分获得等。每个模块创建自己的全局命名空间。这些不同的命名空间是隔离的。因此,不同模块中可能存在的相同名称不会发生冲突。
变量和表达式
要将现实世界的问题转化为可以通过算法解决的问题,有两个相互关联的任务。首先,选择变量,其次,找到与这些变量相关的表达式。变量是附加在对象上的标签;它们不是对象本身。它们也不是对象的容器。变量不包含对象,而是充当对象的指针或引用。例如,考虑以下代码:
在这里,我们创建了一个变量 a,它指向一个列表对象。我们创建另一个变量 b,它指向同一个列表对象。当我们向这个列表对象追加一个元素时,这种变化会同时反映在 a 和 b 中。
Python 是一种动态类型语言。在程序执行期间,变量名可以绑定到不同的值和类型。例如,每个值都是类型、字符串或整数;但是,指向该值的名称没有特定类型。这与许多语言(例如 C 和 Java)不同,其中名称表示内存中的固定大小、类型和位置。这意味着当我们在 Python 中初始化变量时,我们不需要声明类型。此外,变量,或者更具体地说是它们指向的对象,可以根据分配给它们的值更改类型,例如:
变量范围
了解函数内部变量的作用域规则很重要。每次执行函数时,都会创建一个新的本地命名空间。这表示一个本地环境,其中包含由函数分配的参数和变量的名称。为了在调用函数时解析命名空间,Python 解释器首先搜索本地命名空间(即函数本身),如果未找到匹配项,则搜索全局命名空间。这个全局命名空间是定义函数的模块。如果仍未找到该名称,它将搜索内置命名空间。最后,如果失败,则解释器会引发 NameError 异常。考虑以下代码:
在示例中,定义了两个全局变量。我们需要使用关键字 global 告诉解释器,在函数内部,我们指的是一个全局变量。当我们将此变量更改为 11 时,这些更改会反映在全局范围内。但是,我们设置为 21 的变量 b 是函数的局部变量,函数内部对其所做的任何更改都不会反映在全局范围内。当我们运行函数并打印 b 时,我们看到它保留了它的全局值。
到此这篇关于Python 中的命名空间、变量和范围的文章就介绍到这了,更多相关Python命名空间内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341