ad

《Python学习笔记 从入门到实战》_更了解Python的途径之一_9.3.2 查找命名空间

网友投稿 49 2023-11-07

【摘要】 本书摘自《Python学习笔记 从入门到实战》一书中第9章,第3节,由张学建编著。

9.3.2 查找命名空间

在 Python 程序中,当某一行代码要使用变量x 的值时,会到所有可用的名字空间去查 找这个变量,按照如下所示的顺序进行查找。

(1)局部命名空间:特指当前函数或类的方法。如果函数定义了一个局部变量x, 或 一 个参数x,Python 程序将使用它,然后停止搜索。

(2)全局命名空间:特指当前的模块。如果模块定义了一个名为x 的变量,函数或类, Python 将使用它然后停止搜索。

(3)内置命名空间:对每个模块都是全局的。作为最后的尝试, Python 将假设x 是内

《Python学习笔记 从入门到实战》_更了解Python的途径之一_9.3.2 查找命名空间

置函数或变量。

(4)如果Python 在上述命名空间找不到x, 它将放弃查找并引发一个NameError 异常, 例如 NameError:name ‘aa’is not defined。

在 Python 程序中,嵌套函数命名空间的查找顺序比较特殊,具体说明如下所示。

(1)先在当前(嵌套的或lambda) 函数的命名空间中搜索。

(2)然后在父函数的命名空间中进行搜索。

(3)接着在模块命名空间中搜索。

(4)最后在内置命名空间中搜索。

例如在下面的实例代码中,演示了嵌套函数命名空间的查找过程。

实例9-9:查找嵌套函数命名空间

源码路径:下载包\daimal9\9-9

在上述实例代码中,info 在全局命名空间中, country 在父函数的命名空间中, city 和 area 在自己函数的命名空间中。执行后会输出:

2024奥运会主办地:法国巴黎丰台区

9.3.3 命名空间的生命周期

在 Python 程序中,在不同的时刻创建不同的命名空间,这些命名空间会有不同的生存期。 具体说明如下所示。

(1)内置命名空间在 Python 解释器启动时创建,会一直保留下去,不会被删除。

(2)模块的全局命名空间在模块定义被读入时创建,通常模块命名空间也会一直保存 到解释器退出。

(3)当函数被调用时创建一个局部命名空间,当函数返回结果或抛出异常时被删除。每 一个递归调用的函数都拥有自己的命名空间。

Python 语言有一个自己的特别之处,在于其赋值操作总是在最里层的作用域。赋值不会 复制数据,只是将命名绑定到对象而已。删除操作也是如此,例如 “del y”只是从局部作用 域的命名空间中删除命名“y” 而已。而事实上,所有引入新命名的操作都作用于局部作用域。 请看下面的演示代码,因为在创建命名空间时,Python 会检查代码并填充局部命名空间。在 Python运行那行代码之前,就发现了对i 的赋值,并把它添加到局部命名空间中。当函数执 行时,Python 解释器认为i 在局部命名空间中,但是没有值,所以会产生错误

9.3.4 命名空间访问函数 locals()与 globals()

在 Python程序中访问命名空间时,不同的命名空间用不同的方式进行访问,具体说明如下 所示。

(1)局部命名空间。

在Python 程序中,可以使用内置函数 locals) 来访问局部命名空间。例如在下面的实例 代码中,演示了使用内置函数 locals) 来访问局部命名空间的过程。

实例9-10:使用内置函数 locals) 访问局部命名空间

源码路径:下载包\daima\9\9-10

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 [email protected] 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《深入理解 Java 虚拟机 JVM 高级特性与最佳实践(第3版)》_求知之路漫漫_3.5.3 Parallel Scavenge 收集器
下一篇:《Excel VBA+SQL数据管理与应用模板开发》_工作效率UP!_8.1.4 运算符和表达式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×