python3xiaobaike_2020/chapter6/6-5 python3小白课:定义包.md
2025-04-20 23:22:14 +08:00

105 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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))
```
这里仅做了简单的调用示例,可以正常获取到模块的成员内容并调用。
后续我们将再详细讲解调用包中的成员的更多知识。
---
### 包中定义子包
当包的大小达到一定程度之后,感觉又不好维护了,或者这个包本身就是由好几个团队分别维护的,这时候这个包就很大功能很全。
由于我们讲过包其实本质也是模块,那么在包中再嵌套多个文件夹,每个文件夹像包一样的定义好,形成包中的子包,也是支持的。
关于这个,你知道了解即可,我们就不进行深入探讨了。