
上QQ阅读APP看书,第一时间看更新
3.3.3 包的使用
1.建立包
当程序比较复杂,模块较多时,可以根据模块功能,将模块放到不同目录下,这样就形成了包,并且在每个目录下放置一个__init__.py文件,__init__.py文件在模块导入时初始化文件。例如图3-2所示的Model包,在Model目录下有__init__.py文件,还有两个文件夹,每个文件夹下也有__init__.py文件,每个文件下还有其他py文件,这样就形成了一个完整的包。__init__.py文件中可以写代码,也可以不写,例如在Model下的__init__.py文件写入__all__=("solver.py","BC","Element"),则使用“from Model import*”才可以把solver模块导入。

图3-2 Model包示意图
2.使用包
假如在上面模块的element1.py中有个变量var=10和函数average(*arg),要使用这个变量和函数,可以采用下面3种方式。
第1种方式是“import完整包名.模块名”,在调用模块中的变量和函数时,需要用“完整包名.模块名.变量”或“完整包名.模块名.函数()”的形式,例如下面的代码。

第2种方式是使用“from完整包名import 模块名”,这时在程序中要使用模块中的变量、函数和类,可以用“模块名.变量”或“模块名.函数()”的形式,例如下面的代码。

第3种方式是使用“from完整包名.模块名import变量,函数,类”,还可以用“from完整包名.模块名import *”形式导入所有的变量、函数和类,这时在程序中要使用模块中的变量、函数和类,可以直接使用变量名、函数名和类名,例如下面的代码。
