ad

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

网友投稿 61 2023-11-07

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

9.3 命名空间:存储变量与值对应关系的字典

9.3.1 命名空间的本质

在 Python 程序中,通常会存在如下三个可用的命名空间。

(1)每个函数都有自己的命名空间,这被称为局部命名空间,它记录了函数的变量, 包括函数的参数和局部定义的变量。

(2)每个模块拥有自己的命名空间,这被称为全局命名空间,它记录了模块的变量, 包括函数、类、其他导入的模块、模块级的变量和常量。

(3)还有就是内置命名空间,任何模块均可访问它,它存放着内置的函数和异常。 要想理解 Python 语言的命名空间,首先需要掌握如下所示的三条规则。

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

(1)赋值(包括显式赋值和隐式赋值)产生标识符,赋值的地点决定标识符所处的命 名空间。

(2)函数定义(包括 def 和 lambda) 产生新的命名空间。

(3)Python 搜索一个标识符的顺序是 “LEGB” 。 所谓的 “LEGB”, 是 指 Python 语 言 中4层命名空间的英文名字首字母的缩写,具体说明如下所示。

● 最里面的1层是L(local), 表示在一个函数定义中,而且在这个函数里面没有再包含函数的定义。

● 第2层E(enclosing function), 表示在一个函数定义中,但这个函数里面还包含有函数的定义,其实L 层 和E 层只是相对的。

● 第3层G(global), 是指一个模块的命名空间,也就是说在一个.py文件中定义的标识符,但不在一个函数中。

● 第4层B(builtin),是指Python解释器启动时就已经具有的命名空间,之所以叫 builtin是因为在Python解释器启动时会自动载入_builtin_ 模块,这个模块中的list 、str 等内置函数处于B 层的命名空间中。

注意:在Python程序中,可以通过模块来管理复杂的程序,而将不同功能的函数分布在 不同的模块中,函数及其全局命名空间决定了函数中引用全局变量的值。函数的全局命名空 间始终是定义该函数的模块,而不是调用该函数的命名空间。因此,在函数中引用的全局变 量始终是定义该函数模块中的全局变量。

例如在下面的实例代码中,演示了函数与其全局命名空间关系的过程。

实例9-8:函数与其全局命名空间

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

实例文件 testpy 是一个测试文件,调用了模块mo 中的方法moo_fiun( 。 在此文件中也定 义了全局变量 name 和函数 barO), 并在函数 bar) 中输出了全局变量 name 的值。然后分别调用 本模块中定义的函数barO 和 从mo 模块中导入的函数moo_fum(, 最后还定义一个把函数作为 参数传入并调用的函数 call_moo_fun() 。 因为函数中引用的全局变量始终是定义该函数模块中 的全局变量,所以第一次调用输出了当前模块中的全局变量name 的值;而第二次调用从mo 模块中导入的函数moo_fun(), 输出的则是在mo 模块中的全局变量 name 的值。第三次调用 call_moo_finO函数,并把从mo模块中导入的函数moo_fumO作为参数传入其中进行调用, 即使是在函数内部被调用,它仍然输出函数moo_fun() 模块中全局变量 name 的值。实例文件 test.py 的具体实现代码如下所示。

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

上一篇:《自己动手写 Python 虚拟机》_更理解虚拟机的意义_6.2.2 函数的参数
下一篇:《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_2.6.5 UrlConf 的命名空间
相关文章

 发表评论

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

×