# python3小白课:定义包 ### 在\_\_init\_\_.py文件中定义包 我们可以单独在单文件中定义包,接下来我们来尝试一下。 首先创建一个文件夹名叫`xiaobai`,它就是未来的包名和导入名了。在文件夹中创建`__init__.py`文件,并编写如下内容: ```python # 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`文件,编写代码如下: ```python # 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文件,编写内容如下: ```python # coding:utf-8 """ 我是module1 """ NAME = "小白" AGE = 18 ``` 创建一个名为`module2.py`的文件,编写内容如下: ```python # coding:utf-8 """ 我是module2 """ def add_1(num): return num + 1 ``` > [!tip] > > 你还可以多定义几个文件,把你原本的模块拆成子模块,这样每个文件内容可能都会变少,或者更加明确分类,这对于后续的维护帮助很大。 接下来我们在跟`xiaobai`这个文件夹同级的目录下创建一个`test.py`文件,编写代码如下: ```python # coding:utf-8 from xiaobai.module1 import NAME, AGE import xiaobai.module2 as mod2 print(NAME, AGE) print(mod2.add_1(100)) ``` 这里仅做了简单的调用示例,可以正常获取到模块的成员内容并调用。 后续我们将再详细讲解调用包中的成员的更多知识。 --- ### 包中定义子包 当包的大小达到一定程度之后,感觉又不好维护了,或者这个包本身就是由好几个团队分别维护的,这时候这个包就很大功能很全。 由于我们讲过包其实本质也是模块,那么在包中再嵌套多个文件夹,每个文件夹像包一样的定义好,形成包中的子包,也是支持的。 关于这个,你知道了解即可,我们就不进行深入探讨了。