且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《Abaqus GUI程序开发指南(Python语言)》——2.11 包导入

更新时间:2022-10-12 21:20:53

本节书摘来自异步社区《Abaqus GUI程序开发指南(Python语言)》一书中的第2章,第2.11节,作者: 贾利勇 , 富琛阳子 , 贺高 , 周正光 更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.11 包导入

前面介绍了模块的导入方法,除了导入一个模块名之外,Python还可以导入指定的目录路径,Python代码的目录就称为包,这类对目录的导入就称为包导入。实际上,包导入是把计算机上的目录变成另一个Python的命名空间,而属性则对应目录中所包含的子目录和模块文件。

包导入对于组织大型系统内的文件会很方便,而且可以简化模块搜索路径的设置,本书第六章“用户自定义GUI应用程序开发指南”中采用了大量的包导入实例。

【语法】包导入的语法与模块导入类似,区别在于包导入时需要指定文件的路径。

import dir1.dir2.module_name 
from dir1.dir2.module_name import function_name

上述语句中的“点号”路径与计算机上的目录路径一致,dir1为一级目录,dir2为dir1中的二级子目录,dir2中包含了一个名为module_name.py的模块文件,同样,该模块文件中定义了名为function_name的函数。

需要注意的是,在使用包导入时,包导入语句所提及路径中的每个目录内都必须有一个init.py文件,否则导入包会失败。init.py文件的作用是将当前文件夹标记为一个包,相当于包的注册文件,init.py的内容可以为空。

读者可以将常用的代码合并到一个包中,通过调用该包内的各个模块来实现代码的重用。图2.2为包、模块和函数三者之间的关系图,每个包内可以包含多个子包或模块,且每一级包内都必须包含init.py文件,另外,每个模块文件内可以定义多个函数。


《Abaqus GUI程序开发指南(Python语言)》——2.11 包导入

【实例2.38】包的定义及调用

本实例的源代码存放于随书配套资源chapter22.11中。

按照图2.2所示的组织结构图,在Abaqus的工作目录下,例如D:Temp文件夹内创建一个名为package的文件夹,该文件内创建两个子文件夹(subpackage1和subpackage2)和一个init.py文件,subpackage1内创建一个模块文件module1.py和一个init.py文件,module1.py源代码如下。

def add(x,y): 
  add=x+y 
  print 'the sum of x and y is %f.' % add

然后在subpackage2内创建一个子包subpackage3、一个模块文件module2.py和一个init.py文件,同样,在subpackage3内创建一个模块文件module3.py和一个init.py文件,module3.py源代码如下。

def multiple(x,y): 
  m=x*y 
  print 'the product of x and y is %f.' % m
  return m

上述定义完成后,在Abaqus GUI命令交互行输入以下指令并查看计算结果。

>>> from package.subpackage1.module1 import add 
>>> from package.subpackage2.subpackage3.module3 import multiple 
>>> add(4,5) 
the sum of x and y is 9.000000. 
>>> multiple(4,5) 
the product of x and y is 20.000000. 
20

如果将subpackage1中的init.py文件删除,然后重新执行包导入指令,则会出现以下提示错误。

>>> from package.subpackage1.module1 import add 
ImportError: No module named subpackage1.module1

提示

在Abaqus GUI图形界面开发过程中,将大量运用包导入,尤其是自定义GUI应用程序的开发过程中(详见本书第六章内容),使用包导入可以轻松地找到对应文件,简化文件搜索路径设置,使复杂程序的组织结构更加清晰,提高代码的可读性,同时也便于对代码进行管理。本节仅简要介绍了包导入的概念和使用方法,更多关于包导入的知识请参照其他Python语言书籍。