8.2 名字、作用域和名字空间
上一节在PyFrameObject 中,我们看到了3 个独立的名字空间:local 名字空间、global 名字空间和builtin 名字空间。名字空间对Python 来说,是一个非常核心的概念,整个Python 虚拟机运行的机制与“名字空间”这个概念有非常紧密的联系。在Python 中,与名字空间这个概念紧密联系着的还有“名字”、“作用域”这些概念。本节将深入地介绍这些概念在Python 中的实现或作用。
在本节中,我们将提到函数、module、class 等概念。尽管这些部分将在以后的章节中才会被剖析,但是本节将不会涉及函数、module、class 在Python 中是如何实现的。
8.2.1 Python 程序的基础结构——module
现实中的Python 程序通常并不会集中在一个巨大的.py 文件中。相反,一般来说,一个Python 应用程序总是由多个.py 文件组成,每一个.py 文件中包含了多行Python 中的表达式,每一个.py 文件被称Python 视为一个module。这些module 中,有一个主module,如果你的Python 应用程序是通过python main.py 启动的,那么这个main.py 就是一个主module。
Python 中引入module 的概念,其主要目的是将一些逻辑相关的代码放到一个module中,以备日后使用,即实现代码复用;而另一个目的则是为整个系统划分名字空间。一个名字(有时也称为符号)就是用于代表某些事物的一个有助于记忆的字符序列。在Python 中,一个标识符就是一个名字,比如变量名、函数名、类名等等,这些都是名字。名字最终的作用不在于名字本身,而在于名字背后对应的那个事物。对Python 这类动态语言来说,名字的意义远比其对C 这样的静态语言的意义大,因为名字是Python 在运行时能够找到其所对应的东西的唯一途径。
在Python 中,要使用或执行一个module,必须首先加载一个module。加载可以用两种方式:一种是一般module 的加载,通过import 动作进行动态地加载;一种是主module的加载,通过python main.py 这样的方式完成。不管一个module 是如何被加载的,在加载的过程中都会进行一个动作——执行module 中的表达式。
考虑下面的一个module:
[A.py] |
在module A 被加载时,Python 会执行“a = 1”、“a += 1”、“def f():”、“print a”这4 条语句(没错,“def f()”这个貌似函数“定义”的语句确实是一个可以被执行,也必须被执行的表达式,这点与C/C++中的函数完全不同)。在这4 个看上去都差不多的语句中,有两个特殊的语句,它们被称为“赋值语句”。
| 回书目 上一节 下一节 |
|
||||
| · 无线路由器故障处理 · 解析35岁技术人的价值.. · 无线重中之重:安全问题 · 无线局域网基本知识 · 家庭无线局域网 · 华为七千人主动辞职规.. · 微软出价446亿美元收购.. · 虚拟化的“赤壁之战” |
· Windows Server 2008专.. · 802.11n:下一代的无线.. · 脉冲无线电uwb专题 · AIX操作系统管理应用 · 云计算时代来临 · 求职必杀技 决战面试官 · 龙芯要做中国的“奔腾” · 2008年上半年IT技术图.. |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · 无线网状网(MESH) · Windows远程桌面应用 · C#技术开发指南 |
· Apache技术专题 · Windows集群服务应用 · C#技术开发指南 · 文档格式标准开战 OOXM.. · 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · C#技术开发指南 · 三层交换技术专题 · Apache技术专题 · C#技术开发指南 |
· Windows远程桌面应用 · 企业数据恢复指南 · Windows集群服务应用 · 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 解析35岁技术人的价值.. |
|||