python的模块(module)和包(package)

226 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、python中的基本概念

1、模块module

模块module: 在python中一个.py文件就称为一个模块。当然”.pyo”、”.pyc”、”.pyd”、”.so”、”.dll”也可以,但Python初学者几乎用不到。模块中一般包括定义的函数、类、变量、可执行代码等。module的常见来源有一下三种:①python内置模块(标准库)  ②  第三方模块  ③自定义模块。

好处:

(1)使用模块的好处就是大大的提高代码的可维护性;

(2)不用重复造轮子,一个模块编写完毕就可以在其他地方被调用。

(3)使用模块还可以避免函数名和变量名的冲突,相同名字的函数和变量完全可以分别存在于不同的模块中。  

2、包package

如果不同人编写的模块名重复了该怎么办?为此python引入了按目录来组织模块的方法,称为包(package)。

举个例子:一个abc.py的文件就是一个名字为abc的模块(module);一个xyz.py的文件就是一个名字为xyz的模块。假设我编写的abc和xyz这两个模块名和其他的模块有冲突。这要怎么办了?其实我们可以利用包来避免模块的冲突。具体而言就是选择一个顶层包名,按照如下目录存放。

      引入了包之后只要顶层包名不与别人的冲突,其下的所有模块都不与别人冲突了。现在abc.py模块的名字变成了mycompany.abc,类似的xyz.py的模块名变成了mycompany.xyz。

      包package的本质就是一个有层次的文件目录结构。显然我们可以按照这个规则建立多级目录。

注意:每个包目录下面都会有一个_init_.py的文件,这个文件是必须要有的。否则Python只把这个目录当成普通目录而不是一个包。__init__.py可以是一个空文件,也可以有python代码。

二、模块的导入的方法

# 导入一个模块
import model_name
# 导入多个模块
import module_name1,module_name2

# 导入模块中的指定的属性、方法(不加括号)、类
from moudule_name import element1
# 导入多个模块中的指定的属性、方法(不加括号)、类
from moudule_name import element1,element2

# 导入com/tencent/epc/innerprocess包内的cloudcc_pb2模块并重命名为cloudcc
import com.tencent.epc.innerprocess.cloudcc_pb2 as cloudcc

1、import model_name:本质是将module_name.py中的全部代码加载到内存并赋值给与这个模块同名的变量即module_name。导入后我们就可以以module_name.fun1、module_name.fun2的形式来已用模块中的函数、类等了。

2、from module_name import func1,func2:本质是导入module_name模块中的指定变量或者方法到当前文件中。我们直接使用func1、func2就好了。

3、当cloundcc_pb2.py位于com/tencent/epc/innerprocess这个多层次的包结构下时,其对应的模块名就是com.tencent.epc.innerprocess.cloudcc_pb2。