总结下最近学习learning python模块部分的收获吧。

模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便重用。

一、模块搜索路径

模块必须在导入之后才能使用,所以首先就需要明白如何确定模块的搜索路径。

1、程序主目录

2、PYTHONPATH(环境变量)目录

3、标准链接库目录

4、任何.path文件的内容

以上4部分组成了sys.path的内容。

二、模块编译

在找到合适的模块文件之后,编译器会将.py代码文件编译成为.pyc“字节码”文件,字节码是python特有的一种编码,.py文件编译成为.pyc的字节码文件,然后解释.pyc字节码文件,可以加快程序的执行速度,.pyc也是可以直接运行的,因此,发布.pyc文件可以避免发布源代码。只有被导入的文件才会在硬盘中留下字节码文件,顶层文件的字节码文件在程序执行完之后就被丢弃了。

三、模块导入

模块的导入主要有两种方法,一是使用improt语句,二是使用from ... import ...。个人偏向于使用import语句,因为这样能比较清晰的告诉读者每一个变量是从哪个模块中导入的。imp.reload()可以实现模块重载。

四、模块包

如果模块在一个较深的目录中,此时的导入就需要使用模块包导入的技巧了。如模块在目录dir0/dir1/dir2/mod.py下,但只有dir0在模块的检索目录列表中,此时直接使用import mod语句是无法导入mod模块的。我们可以import dir1.dir2.mod来导入此模块,但有两个前提条件:1、dir0必须在模块的检索目录中;2、在dir1、dir2目录下必须存在__init__.py文件,此文件可以为空,但必须存在,目的是防止重名的目录出现在模块检索目录的前面,在模块导入是产生歧义。