一般的Python程序的构架是指:将一个程序分割为源代码文件的集合以及将这些部分链接在一块儿的方法。网络
Python的程序构架可表示为:app
一个Python程序就是一个模块的系统。它有一个顶层文件(启动后可运行程序)以及多个模块文件(用来导入工具库)。
注:标准库模块:Python中自带的实用模块,也称为标准连接库,这个集合体大约有200多个模块,包含于平台不相关的常见程序设计任务:操做系统接口、对象永久保存、文字匹配模式、网络和Internet脚本、GUI建构等。注意:这些工具都不是Python语言的组成部分,可是,能够在任何安装了标准Python的状况下,导入适当的模块来使用。函数
概念:模块是Python 中最高级别的组织单元,它将程序代码和数据封装起来以便重用。其实,每个以扩展名 .py 结尾的Python文件都是一个模块。
模块的三个角色:工具
程序和模块:Python中,程序是做为一个主体的、顶层的文件来构造的,配合有零个或多个支持的文件,然后者这些文件均可以称做模块(顶层的文件也能够做为模块使用,但通常状况不做为模块)。
顶层文件:包含了程序的主要的控制流程:即须要运行来启动应用的文件。
模块文件:可看作是工具的仓库(即装满了工具),这些工具是用来收集顶层文件(或其余可能的地方)使用的组件。
顶层文件与模块文件:顶层文件使用了在模块文件中定义的工具,为这些模块也使用了其余模块所定义的工具。
模块的执行环境:模块包含变量、函数、类以及其余的模块(若是导入的话),而函数也有本身的本地变量。下图描述了模块内的状况以及与其余模块的交互,即 模块的执行环境:学习
可见:模块能够被导入,但模块也会导入和使用其余模块,这些模块能够用Python或其余语言(如,C语言)写成。spa
概念:一个文件可经过导入一个模块(文件)读取这个模块的内容,即导入从本质上讲,就是在一个文件中载入另外一个文件,而且可以读取那个文件的内容。一个模块内的内容经过这样的属性(object . attribute)可以被外界使用。
导入是Python中程序结构的重点所在。操作系统
import a moudle时,首先,Python解释器会检查module registry(sys.moudles)部分,查看是否该模块先前就已经导入,若是sys.modules 中已经存在(即已注册),则使用当前存在的模块对象便可。若是 sys.modules 中还不存在,则:设计
而后在新的模块命名空间、执行该模块代码对象(code object)。全部由该代码指定的变量都可以经过该模块对象引用。
注:上述步骤只有在模块第一次执行时才会执行。在这以后,导入相同模块时,会跳过这些步骤,而只提取内存中已加载的模块对象。这是个有意设计的结果。由于导入(找文件--将其编译成字节码--运行代码)是一个开销很大的操做以致于每一个程序运行不可以重复多于一次。若想要Python 在同一次会话中再次运行文件(不中止和从新启动会话),须要调用内置的reload(重载)函数(该函数返回值为一个Python模块对象)。code
以上四个组件组合起来就变成了 sys.path,其保存了模块搜索路径在机器上的实际配置,能够经过打印内置的sys.path 列表来查看这些路径。导入时,Python会由左至右搜索列表中的每一个目录,知道找到对应的module为止。
其中搜索路径的(1)和(3)是系统自动定义的,而(2)(4)能够用于拓展路径,从而加入本身的源代码目录。
另外:也可使用sys.path在Python程序运行时临时修改模块搜索路径。
如:对象
import sys sys.path.append('C:\\mydir')
注:以上sys.path的设置方法只是在程序运行时临时生效的,一旦程序结束,不会被保留下来。而前面介绍的四种路径配置方式则会在操做系统中永久保存下来。
一、《Python 学习手册》第3章、第18章以及第19章二、Importing Python Modules from effot.org