笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

9.2. Python 作用域和命名空间

发布者: 笨鸟自学网

在介绍类之前,我首先介绍一些有关 Python 作用域的规则。类的定义非常巧妙的运用了命名空间,要完全理解接下来的知识,需要先理解作用域和命名空间的工作原理。另外,这一切的知识对于任何高级 Python 程序员都非常有用。

让我们从一些定义说起。

命名空间 是从命名到对象的映射。当前命名空间主要是通过 Python 字典实现的,不过通常不关心具体的实现方式(除非出于性能考虑),以后也有可能会改变其实现方式。以下有一些命名空间的例子:内置命名(像 abs() 这样的函数,以及内置异常名)集,模块中的全局命名,函数调用中的局部命名。某种意义上讲对象的属性集也是一个命名空间。关于命名空间需要了解的一件很重要的事就是不同命名空间中的命名没有任何联系,例如两个不同的模块可能都会定义一个名为 maximize 的函数而不会发生混淆-用户必须以模块名为前缀来引用它们。

顺便提一句,我称 Python 中任何一个“.”之后的命名为 属性 --例如,表达式 z.real 中的 real 是对象 z 的一个属性。严格来讲,从模块中引用命名是引用属性:表达式 modname.funcname 中,modname 是一个模块对象,funcname 是它的一个属性。因此,模块的属性和模块中的全局命名有直接的映射关系:它们共享同一命名空间![1]

属性可以是只读过或写的。后一种情况下,可以对属性赋值。你可以这样作: modname.the_answer = 42 。可写的属性也可以用 del 语句删除。例如: del modname.the_answer 会从 modname 对象中删除 the_answer 属性。

不同的命名空间在不同的时刻创建,有不同的生存期。包含内置命名的命名空间在 Python 解释器启动时创建,会一直保留,不被删除。模块的全局命名空间在模块定义被读入时创建,通常,模块命名空间也会一直保存到解释器退出。由解释器在最高层调用执行的语句,不管它是从脚本文件中读入还是来自交互式输入,都是 __main__ 模块的一部分,所以它们也拥有自己的命名空间(内置命名也同样被包含在一个模块中,它被称作 builtins )。

当调用函数时,就会为它创建一个局部命名空间,并且在函数返回或抛出一个并没有在函数内部处理的异常时被删除。(实际上,用遗忘来形容到底发生了什么更为贴切。)当然,每个递归调用都有自己的局部命名空间。


12下一页
Python3编程手册
  1. Python 入门指南

  2. 1. 开胃菜

  3. 2. 使用 Python 解释器

  4. 2.1. 调用 Python 解释器

  5. 2.2. 解释器及其环境

  6. 3. Python 简介

  7. 3.1. 将 Python 当做计算器

  8. 3.2. 编程的第一步

  9. 4. 深入 Python 流程控制

  10. 4.1. if 语句

  11. 4.2. for 语句

  12. 4.3. range() 函数

  13. 4.4. break 和 continue 语句

  14. 4.5. pass 语句

  15. 4.6. 定义函数

  16. 4.7. 深入 Python 函数定义

  17. 4.8. 插曲:编码风格

  18. 5. 数据结构

  19. 5.1. 关于列表更多的内容

  20. 5.2. del 语句

  21. 5.3. 元组和序列

  22. 5.4. 集合

  23. 5.5. 字典

  24. 5.6. 循环技巧

  25. 5.7. 深入条件控制

  26. 5.8. 比较序列和其它类型

  27. 6. 模块

  28. 6.1. 深入模块

  29. 6.1.1. 作为脚本来执行模块

  30. 6.1.2. 模块的搜索路径

  31. 6.1.3. “编译的” Python 文件

  32. 6.2. 标准模块

  33. 6.3. dir() 函数

  34. 6.4. 包

  35. 7. 输入和输出

  36. 7.1. 格式化输出

  37. 7.2. 文件读写

  38. 8. 错误和异常

  39. 8.1. 语法错误

  40. 8.2. 异常

  41. 8.3. 异常处理

  42. 8.4. 抛出异常

  43. 8.5. 用户自定义异常

  44. 8.6. 定义清理行为

  45. 8.7. 预定义清理行为

  46. 9. 类

  47. 9.1. 术语相关

  48. 9.2. Python 作用域和命名空间

  49. 9.2.1. 作用域和命名空间示例

  50. 9.3. 初识类

  51. 9.4. 一些说明

  52. 9.5. 继承

  53. 9.6. 私有变量

  54. 9.7. 补充

  55. 9.8. 异常也是类

  56. 9.9. 迭代器

  57. 9.10. 生成器

  58. 9.11. 生成器表达式

  59. 10. Python 标准库概览

  60. 10.1. 操作系统接口

  61. 10.2. 文件通配符

  62. 10.3. 命令行参数

  63. 10.4. 错误输出重定向和程序终止

  64. 10.5. 字符串正则匹配

  65. 10.6. 数学

  66. 10.7. 互联网访问

  67. 10.8. 日期和时间

  68. 10.9. 数据压缩

  69. 10.10. 性能度量

  70. 10.11. 质量控制

  71. 10.12. “瑞士军刀”

  72. 11. 标准库浏览

  73. 11.1. 输出格式

  74. 11.2. 模板

  75. 11.3. 使用二进制数据记录布局

  76. 11.4. 多线程

  77. 11.5. 日志

  78. 11.6. 弱引用

  79. 11.7. 列表工具

  80. 11.8. 十进制浮点数算法

  81. 12. 虚拟环境和包

  82. 12.1. 简介

  83. 12.2. 创建虚拟环境

  84. 12.3. 使用 pip 管理包

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-7-27 17:40 , Processed in 0.084090 second(s), 17 queries .

© 2001-2020

返回顶部