![代替VBA!用Python轻松实现Excel编程](https://wfqqreader-1252317822.image.myqcloud.com/cover/254/43738254/b_43738254.jpg)
1.14 工程
较大的工程常常由多个模块组成,这些模块有负责计算的,有负责绘图的,有负责图形用户界面的,等等,多模块协同合作,完成比较复杂的工作任务。在一个模块中使用其他模块的函数或类,需要先导入该模块。
1.14.1 导入内置模块和第三方模块
使用内置模块中的函数和类,需要先用import语句导入该模块,语法格式为:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/091-3.jpg?sign=1739421696-1RF7APhpupWXRKomxQRwv4RxikJx67d4-0-56f511f0e9ec406dfcb35279ca8d5497)
在调用模块中的函数时,这样引用:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/092-1.jpg?sign=1739421696-MFhYd6kHMtNdqL6xBWU0MFsk96eX3RX8-0-07dddd185087ac14decb4a07d50c822b)
如果只引入模块中的某个函数,则使用from…import语句。
下面在一个模块中导入math模块,调用它的sin函数、cos函数和常量pi计算给定30度角的正弦值和余弦值。该文件位于Samples目录下的ch01子目录中,文件名为sam01-30.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/092-2.jpg?sign=1739421696-6HDopLbrorWYhOKIUtZGteNqpS5Oxqkm-0-4a36734c53cadebfe93014d18c42b836)
第1行导入math模块,第2行从math模块中导入cos函数,第3行用常量pi计算30度角,第4行用math.sin()函数计算30度角的正弦值,第5行直接用cos函数计算30度角的余弦值,第6行和第7行分别输出正弦值和余弦值。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/092-3.jpg?sign=1739421696-0HITBvNKBDBKuKfkMmZaTrQ90sQvWqZm-0-141ac32b8aaa8e3f1238ff651a44a4ff)
1.14.2 导入自定义模块
对于自定义模块而言,因为模块文件保存的位置不确定,直接使用import语句可能会导致出错。一般情况下,使用import语句导入模块后,Python会按照以下顺序查找指定的模块文件。
• 当前目录,即该模块文件所在的目录。
• PYTHONPATH(环境变量)指定的目录。
• Python默认的安装目录,即Python可执行文件所在的目录。
所以,只要自定义模块文件被保存在这三种目录下,就能被Python找到。其中用得最多的是第一种目录,即将导入和被导入的模块放在同一个目录下。
在介绍类模块时创建了sam0129.py文件,其包含一个student类。下面在相同目录下添加一个模块,它导入sam0129模块,并使用其中的student类进行编程。该文件位于Samples目录下的ch01子目录中,文件名为sam01-31.py。
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/092-4.jpg?sign=1739421696-AhOdIQA24mr0tfDGkKHfBVmteD4CjbCK-0-b054c6953e2432111634aef00fa16bf7)
第1行从sam0129模块中导入student类。第3~5行创建类实例,输出类实例的ID属性值,调用它的run方法。
在Python IDLE文件脚本窗口中,在“Run”菜单中单击“Run Module”选项,则IDLE命令行窗口显示下面的结果:
![](https://epubservercos.yuewen.com/10B311/23020647701664206/epubprivate/OEBPS/Images/093-2.jpg?sign=1739421696-6RSCkY7Hu85BQ9q7hOTTk4WrhIUc0pbS-0-c0b5a95051e4038914a7ec566cd6aa52)
前面两个结果是sam0129模块中输出的。
这样,自定义模块可以通过导入其他模块来扩展自身的功能,或者说协同合作,一起把事情做好。