模块的主要作用:

①封装组织Python的代码。当代码量很大的时候,我们可以有组织有纪律的根据不同的功能将代码分割成不同的模块,这样每个模块之间都是分隔开的,更容易阅读和测试。

②实现代码的重用。



if __name__ == '__main__':

下面有两个文件,其中TemperatureConversion.py是转换华氏温度和摄氏温度的模块,cal.py则是导入该模块的一个程序:

python 计算 ICC一致性_Python搜索路径


下图是TemperatureConversion.py里的代码。

最后加入了test()函数测试程序

python 计算 ICC一致性_模块_02

得到的结果是:

python 计算 ICC一致性_模块_03


cal.py里的代码是:

python 计算 ICC一致性_Python搜索路径_04

运行结果是:

python 计算 ICC一致性_python 计算 ICC一致性_05


在写一个模块时,我们会在模块内对它进行单独的测试,而不是等到组装好后测试。因为一个大程序有很多个模块,组装好后测试麻烦。


我们不难看出Python不自觉的把模块中的测试代码打印出来了。

在主程序中为了避免将模块中的测试代码打印出来,我们应该让Python知道该模块是作为程序运行,还是导入到其他程序中。

为了实现这点,我们可以用__name__变量。而__name__变量有以下特性:

①如果是在主程序里使用__name__, 得到的是'__main__'

②如果是在模块中调用__name__,得到的是模块名

python 计算 ICC一致性_Python搜索路径_06


所以我们可以将模块中的test()函数改为:

python 计算 ICC一致性_python 计算 ICC一致性_07


这样就不难理解if __name__ == '__main__':的含义了。



写好的模块应该放在哪里?

方案一:和导入这个模块的源文件放在同一个文件夹

但是我们并不希望把所有的文件都放在同一个文件夹里,我们想通过文件夹的方式更好的组织我们的代码。


在此之前,我们应该理解搜索路径这个概念。

Python模块的导入需要一个路径搜索的过程,也就是说我们如果想要导入一个叫hello的模块,Python会在预定义好的路径里找一个叫hello.py的模块文件,如果有,则导入模块,如果没有,则导入失败。

而这个搜索路径就是一个列表,我们可以通过sys模块里的path变量将其显示出来。

>>> import sys
>>> sys.path
['', 'C:\\Program Files\\Python36\\Lib\\idlelib', 'C:\\Program Files\\Python36\\python36.zip', 'C:\\Program Files\\Python36\\DLLs', 'C:\\Program Files\\Python36\\lib', 'C:\\Program Files\\Python36', 'C:\\Program Files\\Python36\\lib\\site-packages']

也就是说Python会从这一个个的路径里面去搜索有没有我们要导入的模块文件。

最佳存放模块的路径是含“site-package”的那个路径


方案三:另外我们只需要告诉Python模块文件在哪里找,Python在导入模块的时候就可以找到它。

>>> import sys
>>> sys.path.append("你所需要导入模块文件的路径")
>>> import 你所需的模块




包(package):在实际开发中,一个大型的系统有成千上万个模块。用模块来定义Python的功能还不够,如果将这些模块文件全部放在一个文件夹下,会显得混乱,而且有命名冲突的可能,因此Python中出现了包的概念,包有点类似于方案三:把模块分门别类的放在不同文件夹下,然后把各个文件夹的位置告诉Python,但是包的做法更为简洁。


创建一个包:

①创建一个文件夹,用于存放相关的模块,文件夹的名字即包的名字。

②在文件夹中创建一个文件名为__init__.py的模块文件,内容可以为空

③将相关的模块放入文件中

接下来就是导入包中的模块,用   import 包名.模块名



当然,包创建的位置得是在Python搜索路径之下的