6.2 Python作用域和命名空间

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

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

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

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

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

比如在表达式z.real。Real是对象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

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

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

    6.2.1 作用域和命名空间实例 以下的实例主要用来示范怎样引用不同的作用域和命名空间,keywordglobal和nonlocalru怎样影响变量绑定. 实例执行结果是: After local a ...

  2. Python3.2官方文档翻译--异常抛出和自定义异常

    Python3.2官方文档翻译--异常抛出和自定义异常 Python3.2官方文档翻译--异常抛出和自定义异常,有需要的朋友可以参考下. 6.4 抛出异常 Raise语句运行程序员强制抛出一个具体的异 ...

  3. GoogleServices之GooglePlayService Accessing Google APIS(访问谷歌APIS)官方文档翻译

    GoogleServices之GooglePlayService  Accessing Google APIS(访问谷歌APIS)官方文档翻译 AccessingGoogle APIs(访问谷歌API ...

  4. 【iOS官方文档翻译】iOS蓝牙的基本概念

    之前写了[iOS官方文档翻译]iOS的蓝牙连接.数据接收及发送一文,介绍了怎样进行蓝牙通讯,但是很多基本概念没有进行解释,看起来可能有点吃力,所以现在再翻译一篇苹果对官方蓝牙4.0一些基本概念介绍的文 ...

  5. 欢迎参与 KubeVela 官方文档翻译活动

    来源 | 阿里巴巴云原生公众号 背景 KubeVela v1.0 启用了新的官网架构和文档维护方式,新增功能包括文档版本化控制.i18n 国际化以及自动化流程.但目前 KubeVela 官方文档只有英 ...

  6. UIControl事件---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址: iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 UIControl事件1.UIControlEventTouchDown 单点触摸按 ...

  7. 【KubeVela 官方文档翻译】,欢迎大家踊跃参与

    简介:KubeVela v1.0 启用了新的官网架构和文档维护方式,新增功能包括文档版本化控制.i18n 国际化以及自动化流程.但目前 KubeVela 官方文档只有英文版,这提高了学习和使用 Kub ...

  8. Python3 局部变量与全局变量作用域

    1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #Author:sking 4 #Python3 局部变量与全局变量作用域 5 6 name01 ...

  9. UIPageControl---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...

最新文章

  1. python让工作自动化_python操作excel让工作自动化
  2. Python开发【第十二篇】:DOM
  3. parameter localparam define的区别
  4. 《数据库原理与应用(第3版)》——小结
  5. Java线程池如何合理配置核心线程数
  6. http 请求头和响应头
  7. win7环境下创建超级隐藏账户
  8. linux哪个模块允许保存文件,linux网络操作系统与实训 课后习题答案
  9. 索尼高清影视技术学院参观观后感
  10. bzoj 3580 冒泡排序 乱搞+思维
  11. oracle 判断是否复数,第 14 章 使用复数运算库
  12. 微信公众号引流的十种方法
  13. 将linux系统移动硬盘,着手打造你的随身系统---将linux装进移动硬盘
  14. svn创建版本库以及创建其下目录
  15. 电影级视频剪辑PR调色/FCP调色/达芬奇调色预设LUTs
  16. lo linux 环回端口,本地环回接口lo The Loopback Network Interface lo--用Enki学Linux系列(2)...
  17. c语言中赋值号左边必须为变量,.在C语言的赋值语句中,赋值号左边必须是(12)——青夏教育精英家教网——...
  18. 华为鸿蒙电池,4700mAh电池+新鸿蒙系统华为Mate40,华为Mate30再创超低价神话
  19. 2台PLC通讯(FX5U和FX5U)
  20. 数组截取方法-Arrays.copyOfRange()详解

热门文章

  1. 添加远程链接MySQL的权限
  2. 将js文件编译成动态链接库(dll)文件
  3. 给 TWebBrowser.Document 定义事件
  4. Delphi小技巧杂记
  5. sqldeveloper的查看执行计划快捷键F10
  6. 北京修复宕机故障之旅
  7. 本人服务器遭受黑客长期攻击,特把这几天做的一些有用的安全方面总结出来,以方便以后查阅
  8. 机器学习02线性回归、多项式回归、正规方程
  9. bzoj千题计划282:bzoj4517: [Sdoi2016]排列计数
  10. 敏捷现状10周年调查