2.6 KiB
2.6 KiB
python3小白课:定义包
在__init__.py文件中定义包
我们可以单独在单文件中定义包,接下来我们来尝试一下。
首先创建一个文件夹名叫xiaobai,它就是未来的包名和导入名了。在文件夹中创建__init__.py文件,并编写如下内容:
# coding:utf-8
"""
小白同学的包
这是说明文档
命令:add_1(num)
将传入的数字加上1后返回
"""
def add_1(num):
"""将传入的数字加上1后返回,这是函数的文档"""
return num + 1
if __name__ == '__main__':
print("这是在测试模块")
help(__name__)
print("*" * 40)
print(__doc__)
print(add_1(100))
该文件可以自执行来测试。
接下来我们在跟xiaobai这个文件夹同级的目录下创建一个test.py文件,编写代码如下:
# coding:utf-8
import xiaobai
help(xiaobai)
print("*" * 40)
print(xiaobai.__doc__)
print(xiaobai.add_1(1))
执行该文件,发现确实导入包就会导入__init__.py这个文件。
包内定义多个py文件
接下来我们尝试在包中的多个py文件中定义几个子模块吧。
此时__init__.py这个文件创建后留空,什么也不写。
我们在xiaobai这个包文件夹下创建一个名为module1.py的py文件,编写内容如下:
# coding:utf-8
"""
我是module1
"""
NAME = "小白"
AGE = 18
创建一个名为module2.py的文件,编写内容如下:
# coding:utf-8
"""
我是module2
"""
def add_1(num):
return num + 1
Tip
你还可以多定义几个文件,把你原本的模块拆成子模块,这样每个文件内容可能都会变少,或者更加明确分类,这对于后续的维护帮助很大。
接下来我们在跟xiaobai这个文件夹同级的目录下创建一个test.py文件,编写代码如下:
# coding:utf-8
from xiaobai.module1 import NAME, AGE
import xiaobai.module2 as mod2
print(NAME, AGE)
print(mod2.add_1(100))
这里仅做了简单的调用示例,可以正常获取到模块的成员内容并调用。
后续我们将再详细讲解调用包中的成员的更多知识。
包中定义子包
当包的大小达到一定程度之后,感觉又不好维护了,或者这个包本身就是由好几个团队分别维护的,这时候这个包就很大功能很全。
由于我们讲过包其实本质也是模块,那么在包中再嵌套多个文件夹,每个文件夹像包一样的定义好,形成包中的子包,也是支持的。
关于这个,你知道了解即可,我们就不进行深入探讨了。