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