Python3.2官方文档翻译--作用域和命名空间

6.2 Python作用域和命名空间

在介绍类之前。首先我想告诉你一些关于python作用域的规则。

类的定义很巧妙地运用了命名空间,你须要知道范围和命名空间的工作原理以能全面了解接下来发生的。 顺便说一下,关于这节讲到的知识对于不论什么优秀的python程序猿很实用。

让我们開始以一些定义開始。

命名空间(namespace)是一个从名称到对象的映射。大多命名空间眼下用Python字典实现的,但那通常不会被注意(除非为了性能),在将来它能够改变。命名空间的样例是:内置名称的set(包括函数如abs()和内置异常名称)。在模块中的全局变量名称;在函数调用时的局部名称。在一定程度上对象的属性赋值形成一个命名空间。掌握命名空间的重要事情是在不同的命名空间绝对没有关系。比如。两个不同的模块都能够不混淆的定义方法maximize。模块的用户必须用模块名称为前缀。 

随便说一下。我习惯上吧每个跟在点号(.)后面的属性都称为属性(attribute)。

比如在表达式z.realReal是对象z的一个属性。严格意义上讲。在模块中引用的名称都是属性的引用:在表达式modname.funcname,modname是一个模块对象和funcnam是它的一个属性。 在这个样例,这恰好是在于模块属性和在模块定义中的全局变量名称之间的一个简单的映射:它们共享相同的命名空间。

属性是可读的或者是可写的。在后一种情况下。同意对属性赋值。假设模块属性是可写的,你能够这么写。modername.the_answer = 42. 可写属性也能够用del语句删除。比如。del modname.the_answer将会从名叫modname模块中移除属性 the_answer

命名空间能够在不同的时间里存在而且有不同的生命周期。

python解释器启动时,包括内置名称的命名空间就会创建。而且从不删除。当模块定义读入时,模块的全局命名空间就会创建。正常来说。模块命名空间一直存在直到解释器退出。

通过解释器的顶层调用运行。从脚本文件里读取或者交互,都觉得是_main_模块的一部分,因此他们也有自己的全局命名空间。(内置名称实际也存在于一个模块。称为builtins.

当函数调用时函数的局部命名空间就会创建,当函数返回值或者抛出在方法中没有处理的异常时,就会删除。当然,每一个递归调用都有自己的局部命名空间。

作用域就是一个python程序能够直接訪问命名空间的正文区域。

这里“直接訪问”的意思就是一个名称的非法引用试图在命名空间中寻找名称。

虽然作用域都是静态定义,可是它们动态使用。

在运行过程中的不论什么时候,至少有给三个关联的命名空间能够直接訪问的作用域:

l 首先被查的是包括局部变量的最内层作用域 

l 不论什么关闭函数的作用域。它们以近期封装的作用域開始进行查询,包括的不是局部变量也不是非全局变量。

l 接着查询包括当前模块全局变量的作用域。

l 最后查询的就是最外面的作用域,它是包括内置方法的命名空间。

假设名称定义为全局的,那么全部的引用和赋值都能够直接给包括模块全局变量的中间作用域。

为了又一次绑定在最内层作用域外面发现的变量,nonlocal语句能够使用。假设未定义为非本地,这边变量仅仅能读取。(读取这样的变量的尝试就会在最内层作用域中产生一个本地局部变量,而外部那个同样标识符的变量不会改变)

通常,局部作用域引用当前函数的局部变量。

函数外面,局部作用域引用引用和全局作用一样的命名空间:模块命名空间。类定义也会在局部作用域中引入还有一个命名空间。

知道作用域能够在文本中定义是很重要的。

在模块中定义函数的全局作用域是那个模块的命名空间,无论函数从哪里或者用何种名称调用。还有一方面,对名称的真正查询是在执行时候动态查询的。可是。语言的定义正在向编译时静态名称确定进化。因此不要依赖动态名称解决。(其实,局部变量已经静态定义了)

 

 Python一个特别之处是--假设没有全局变量有效--名称的赋值经常进入最内层的范围。赋值不会拷贝数据--它们紧紧是把名称绑定在对象上。删除也是一样。Del语句就会移除从局部作用域的命名空间去掉与x的绑定。

其实。介绍新名称的全部操作都用局部变量,特别是,import语句和函数定义在局部局部作用域中绑定模块或者函数名称。

Global语句能够用来描写叙述活动在全局作用域中的特别变量而且应该绑定在那里。Nonlocal语句描写叙述活动在封装作用域中的特别变量并在那里绑定。

转载于:https://www.cnblogs.com/mfrbuaa/p/5196281.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[react] 你觉得react上手快不快?它有哪些限制?

[react] 你觉得react上手快不快?它有哪些限制? 相对vue来说不快。 限制 需要学习JSX需要工程化的配置需要对原生JavaScript有相当的掌握react只是一个UI层面的库,像vue内置了动画处理、keep-alive等功能,react则需要去找第三方库…

ffmpeg解码流程 turorial5详解

From: http://www.360doc.com/content/11/1117/09/8050095_165108638.shtml FFMPEG解码流程 1. 注册所有容器格式和CODEC:av_register_all() 2. 打开文件:av_open_input_file() 3. 从文件中提取流信息:av_find_stream_info() 4. 穷举所有的流,查找其中种类为CODE…

Windows phone7 开发-Zune software is not launched 【转】

刚学习Windows Phone7开发,遇到这个配置错误,在此记录一下。 错误提示:Zune软件未安装 Zune software is not installed. Install the latest version of Zune software. 遇到这个问题,尝试根据提示,按图索骥&#xf…

[react] 说说你喜欢react的原因是什么?它有什么优缺点?

[react] 说说你喜欢react的原因是什么?它有什么优缺点? 原因: All in JS,没有过多的语法糖、API等,核心思想就是props、state、生命周期、hooks,使用JS的技能就能解决和解释一切现象优点: 使用…

淘宝(taobao)HSF框架

一、背景 随着网站访问量增加,仅仅靠增加机器已不能满足系统的要求,于是需要对应用系统进行垂直拆分和水平拆分。在拆分之后,各个被拆分的模块如何通信?如何保证 性能?如何保证各个应用都以同样的方式交互?…

linux 下实现负载均衡群集(NAT方式)

高可用性群集:以提高应用系统的可靠性,尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果。HA的工作方式包括双工、主从两种模式------双工即所有节点同时在线,主从则只有…

[Redux/Mobx] Redux的中间件是什么?你有用过哪些Redux的中间件?

[Redux/Mobx] Redux的中间件是什么?你有用过哪些Redux的中间件? view在redux中会派发一个action,action通过store的dispatch方法派发给store,store接收到action连同之前老的state一起传给reducer,reducer返回新的数据…

php中json_decode()和json_encode()的使用方法

php中json_decode()和json_encode()的使用方法 json_decode对JSON格式的字符串进行编码而json_encode对变量进行 JSON 编码,需要的朋友可以参考下1.json_decode() json_decode (PHP 5 > 5.2.0, PECL json > 1.2.0) json_decode — 对 JSON 格式的字符串进行编…

获取我的文档“路径

From: http://blog.csdn.net/chinabinlang/article/details/8637362 方法一:来自网络; CString getMyDoc() // 获取“我的文档”路径 {TCHAR m_lpszDefaultDir[MAX_PATH] {0};TCHAR szDocument[MAX_PATH] {0};memset(m_lpszDefaultDir, 0, _MAX_PATH);LPITEMIDLI…

让您变的更智慧 秘笈145条(上)

钱多钱少,常有就好!人老人少,健康就好!家贫家富,和睦就好。生活其实很简单,过了今天就是明天,重要的每个今天和明天都要智慧快乐得活着。 1. 精神失常的疯子不可怕,可怕的是精神正常…

[Redux/Mobx] 说说redux的优缺点分别是什么?

[Redux/Mobx] 说说redux的优缺点分别是什么? 优点 Redux轻量,生态丰富,可以结合流行的redux-thunk、redux-saga等进行使用Redux的写法比较固定,团队应用中风格比较稳定,提高协作中的可维护性因为Redux中的reducer更新…

Bootstrap(七):CSS--图片

1.基本样式 主要四个样式类: 设置布局 .img-responsive : 可以让图片支持响应式布局,从而让图片在其父元素中更好的缩放; 设置形状 .img-rounded : 设置图片为圆角; 设置形状 .img-circle : 设置图片为圆形…

rtsp摘要认证协议(Response计算方法)

From: http://m.blog.csdn.net/blog/WTBEE/9001859 1. rtsp摘要认证协议流程 RTSP协议,全称Real Time Streaming Protocol,是应用层的协议,它主要实现的功能是传输并控制具有实时特性的媒体流,如音频(Audio…

[Redux/Mobx] Redux和vuex有什么区别?

[Redux/Mobx] Redux和vuex有什么区别? 1:vuex的异步数据不需要使用到中件间,redux需要 2:vuex可以直接commit,action不是必须的,redux是必须的 个人简介 我是歌谣,欢迎和大家一起交流前后端知…

android 带图片的文本框

基本原理 自定义一个IconTextView类继承自TextView,添加iconsrc属性,表示图片。 重新onDraw方法,将图片绘制到textVIew前面,然后将textView右移。 废话不多说了,直接代码就明白。 package com.zb;import android.content.Context;…

【WiFi密码破解详细图文教程】ZOL仅此一份 详细介绍从CDlinux U盘启动到设置扫描破解

From: http://softbbs.zol.com.cn/1/32_7991.html 每天都能看到有不少网友在回复论坛之前发布的一篇破解WiFi密码的帖子,并伴随各种疑问。今天流云就为大家准备一篇实战型的文章吧,详细图文从思维CDlinux U盘启动到中文设置,如何进行路由SSID…

整理Linux查看系统日志的一些经常使用命令

整理Linux查看系统日志的一些经常使用命令 last-a 把从何处登入系统的主机名称或ip地址&#xff0c;显示在最后一行。-d 指定记录文件。指定记录文件。将IP地址转换成主机名称。-f <记录文件>  指定记录文件。-n <显示列数>或-<显示列数>  设置列出名单的显…

[Redux/Mobx] 在Redux中怎么发起网络请求?

[Redux/Mobx] 在Redux中怎么发起网络请求&#xff1f; 如果单纯的使用Redux&#xff0c;因为redux的actionCreator返回一个plain object&#xff0c;所以不能在actionCreator中发起网络请求&#xff1b;reducer是一个纯函数&#xff0c;不能有副作用&#xff0c;所以也不能有异…

判断整数序列是不是二元查找树的后序遍历结果

题目&#xff1a;输入一个整数数组&#xff0c;判断该数组是不是某二元查找树的后序遍历的结果。 如果是返回true&#xff0c;否则返回false。 例如输入5、7、6、9、11、10、8&#xff0c;由于这一整数序列是如下树的后序遍历结果&#xff1a; 8 / \ 6 10 / \ / \ 5 7 9…

iOS 从相机或相册获取图片并裁剪

/load user image - (void)UesrImageClicked { UIActionSheet *sheet; // 判断是否支持相机 if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { sheet [[UIActionSheet alloc] initWithTitle:"选择图像" delega…