欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

鱼c笔记——Python模块(二)

程序员文章站 2022-07-14 21:34:06
...

模块的主要作用:

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

②实现代码的重用。



if __name__ == '__main__':


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

鱼c笔记——Python模块(二)


下图是TemperatureConversion.py里的代码。

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

鱼c笔记——Python模块(二)

得到的结果是:

鱼c笔记——Python模块(二)


cal.py里的代码是:

鱼c笔记——Python模块(二)

运行结果是:

鱼c笔记——Python模块(二)


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


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

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

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

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

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

鱼c笔记——Python模块(二)


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

鱼c笔记——Python模块(二)


这样就不难理解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 包名.模块名  (as 模块名的新名)  的形式就行



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