Python学习笔记(12)-Python模块与包示例

时间:2022-12-20 00:30:32

一,概念

本篇主要介绍Python代码的组织体系——模块与包。

作为一种解释型的语言,Python也不是所有的代码都写在一个.py文件里。这样缺点太大了,比如可能导致一个文件代码太多难以阅读;比如每次写代码都要论成败从头再来,没法引用之前写好的.py文件的内容。

所以,Python语言设计者为了组织代码,提出了模块和包的概念。所谓的模块,其实就是每个.py文件的内容。而所谓的包,就是.py文件所在的目录。

模块很容易区分哦.py文件后缀跟.c、.cpp、.java完全不同,Python解释器可以很明确的知道哦,这个.py文件就是我们Python家族的一个模块。

但是包捏,就是一个目录,可能这个鸟目录程序员本来就没给它什么具体含义,只是放一些说明文档和图片内容。Python语言本身是无法区分这个目录是普通的存放文件的目录,还是作为Python的包存在。为了标志某个目录就是咱Python的包,可以在该目录下放一个__init__.py,如果Python解释器发现某个目录下有个文件名为__init__.py,也不用管该文件的内容是啥,就会将该目录看作为包。

OK,本篇就以示例的方式来说明下模块和包的具体运作方式。

二,同目录下模块间调用示例

随意建立一个目录temp(不用管该目录放在哪个目录下),在目录下放置两个模块:function.py用来放置自定义函数,main.py用于调用funciton.py模块中的函数并输出测试结果。注意本次并未在temp目录下放置_init_.py文件

#main.py
import functions#导入模块
c=functions.add(1,2)#调用导入模块的函数
print(c)#成功输出3
print(functions.myNum)#成功输出4
import functions#导入模块
c=functions.add(1,2)#调用导入模块的函数
print(c)#成功输出3
print(functions.myNum)#成功输出4

除了直接导入整个模块,还可以选择性的导入,例如main.py可以这样写:

#main.py
from functions import add,myNum#导入模块部分内容
c=add(1,2)#调用导入模块的函数
print(c)#成功输出3
print(myNum)#成功输出4

需要注意一下这两种方式的区别:直接导入整个模块后,Python是将模块名作为导入模块的指针(PS:可以认为模块名变量保存了导入模块加载到内存后的地址),所以每次调用都需要前缀模块名。而导入模块部分部分内容的方式是将导入模块的具体内容的名(比如函数名、变量名)作为导入部分内容的指针,所以可以直接使用函数名、变量名。总结起来就是,import了谁,谁就被本模块认识了

三,跨目录模块间调用示例

在temp下建立新目录dir1,将main.py文件放于temp根目录下,将functions.py和__init__.py放于dir1下。

代码如下:

#目录temp下dir1下functions.py
def add(a,b):#定义add()函数
return a+b
myNum=4#定义一个变量
#目录temp下main.py
import dir1.functions
c=dir1.functions.add(1,2)#调用导入模块的函数
print(c)#3
print(dir1.functions.myNum)#4

运行之后成功输出3和4,当然在windows下包和模块的管理远非这么简单,暂时我们知道如何调用自定义的包和模块即可。