Python的模块和包的理解

iamlaosong文

学习Python语言,对模块和包的理解总结如下:

1、模块(Module)就是包含代码的文件,不一定是Python代码,有四种代码类型的模块:

•使用Python写的程序( .py文件)
•C或C++扩展(已编译为共享库或DLL文件)
•包(包含多个模块)
•内建模块(使用C编写并已链接到Python解释器内)

使用模块可以提高代码的可维护性和重复使用,还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,所以编写自己的模块时,不必考虑名字会与其他模块冲突,但要注意尽量不要与内置函数名字冲突。

2、包(Package)就是包含模块文件的目录,目录名称就是包名称,目录中可以包含目录,子目录也是包,但包名称应该包含上一级目录的名称。Python引入了按目录来组织模块是为了避免模块名冲突,不同包中的模块名可以相同。

注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是包名。

3、import命令可以导入模块和包,能否被导入,取决于其是否在系统搜索路径中。导入内置模块sys后可以查看sys.path内容确定系统搜索路径。模块和包的名称取决于其存放路径,如下图:

Python的模块和包的理解_第1张图片

图中Python/Lib在搜索路径中,所以可以用import json导入这个包,包名称是json。要想导入json下面的的模块,比如decoder.py,则必须用命令:import json.decoder。同样tests这个包(子目录)要想导入必须用命令import json.tests导入,这个包名称是json.tests。

4、命令“from 模块 import 对象”可以导入模块中的对象,多个对象可以用逗号隔开或者用*导入所有对象,但这种导入方式是将对象导入到当前模块中,所以导入的对象不能和当前模块中的对象同名。

这种方式导入后,可以直接用对象名称调用,而不是用<模块.对象>这样的名称调用,例如模块hello.py中有个test函数,下面是两种导入方式对函数test的调用:

导入模块:

import hello

hello.test()

导入对象:

from hello import test

test()

这种方式下,如果原来定义了test函数,执行导入后原来的test函数就被新导入的test函数替换掉了。


你可能感兴趣的:(Python)