关于Python命名空间中的本质_第1页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、关于python命名空间中的本质python的命名空间是python程序猿必需了解的内容,对python命名空间的学习,将使我们在本质上把握一些python中的琐碎的规章。 接下来我将分四部分揭示python命名空间的本质:一、命名空间的定义;二、命名空间的查找挨次;三、命名空间的生命周期;四、通过locals()和globals() bif拜访命名空间 重点是第四部分,我们将在此部分观看命名空间的内容。 一、命名空间 python用法叫做命名空间的东西来记录变量的轨迹。命名空间是一个 字典(dictionary) ,它的键就是变量名,它的值就是那些变量的值。 a namespace is a

2、 mapping from names to objects. most namespaces are currently implemented as python dictionaries。 在一个 python 程序中的任何一个地方,都存在几个可用的命名空间。 1、每个函数都有着自已的命名空间,叫做局部命名空间,它记录了函数的变量,包括函数的参数和局部定义的变量。 2、每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。 3、还有就是内置命名空间,任何模块均可拜访它,它存放着内置的函数和异样。 二、命名空间查找挨次 当一行

3、代码要用法变量 x 的值时,python 会到全部可用的名字空间去查找变量,根据如下挨次: 1、局部命名空间:特指当前函数或类的办法。假如函数定义了一个局部变量 x,或一个参数 x,python 将用法它,然后停止搜寻。 2、全局命名空间:特指当前的模块。假如模块定义了一个名为 x 的变量,函数或类,python 将用法它然后停止搜寻。 3、内置命名空间:对每个模块都是全局的。作为最后的尝试,python 将假设 x 是内置函数或变量。 4、假如 python 在这些名字空间找不到 x,它将放弃查找并引发一个 nameerror 异样,如,nameerror: name ‘

4、aa’ is not defined。 嵌套函数的状况: 1、先在当前 (嵌套的或 lambda) 函数的命名空间中搜寻 2、然后是在父函数的命名空间中搜寻 3、接着是模块命名空间中搜寻 4、最后在内置命名空间中搜寻 示例: 输出:adress : china shanghai chaoyang 以上示例中,info在全局命名空间中,country在父函数的命名空间中,city、area在自己函数的命名空间中 三、命名空间的生命周期 不同的命名空间在不同的时刻创建,有不同的生存期。 1、内置命名空间在 python 说明器启动时创建,会向来保留,不被删除。 2、模块的全局命

5、名空间在模块定义被读入时创建,通常模块命名空间也会向来保存到说明器退出。 3、当函数被调用时创建一个局部命名空间,当函数返回结果 或 抛出异样时,被删除。每一个递归调用的函数都拥有自己的命名空间。 python 的一个特殊之处在于其赋值操作总是在最里层的作用域。赋值不会复制数据——只是将命名绑定到对象。删除也是如此:del y 只是从局部作用域的命名空间中删除命名 y 。实际上,全部引入新命名的操作都作用于局部作用域。 示例: 因为创建命名空间时,python会检查代码并填充局部命名空间。在python运行那行代码之前,就发觉了对i的赋值,并把它添加到局

6、部命名空间中。当函数执行时,python说明器认为i在局部命名空间中但没有值,所以会产生错误。 四、命名空间的拜访 1、局部命名空间可以 locals() bif来拜访。 locals 返回一个名字/值对的 dictionary。这个 dictionary 的键是字符串形式的变量名字,dictionary 的值是变量的实际值。 示例: 输出:‘str’: ‘first’, ‘x’: 12345, ‘i’: 1 2、全局 (模块级别)命名

7、空间可以通过 globals() bif来拜访。 示例: 输出:(我自己给人为的换行、更换了挨次,加色彩的语句下面重点解释) 总结1、模块的名字空间不仅仅包含模块级的变量和常量,还包括全部在模块中定义的函数和类。除此以外,它还包括了任何被导入到模块中的东西。2、我们看到,内置命名也同样被包含在一个模块中,它被称作 _ builtin_。3、回想一下 from module import 和 import module 之间的不同。 用法 import module,模块自身被导入,但是它保持着自已的名字空间,这就是为什么您需要用法模块名来拜访它的函数或属性:module.function 的缘由。 但是用法 from module import function,事实上是从另一个模块中将指定的函数和属性导入到您自己的名字空间,这就是为什么您可以挺直拜访它们却不需要引用它们所来源的模块。用法 globals 函数,您会真实地看到这一切的发生,见上面的红色输出语句。 3、 locals 与 globals 之间的一个重要的区分 locals 是只读的,globals 不是 示例: 输出: 说明: locals 事实上没有返回局部名字空间,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论