python3xiaobaike_2020/chapter6/6-2 python3小白课:自己写模块.md
2025-04-20 23:22:14 +08:00

119 lines
3.9 KiB
Markdown
Raw 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小白课自己写模块
### 模块定义
要自己写一个模块语法也非常非常简单其实模块就是一个自己写的python脚本文件你可以在一个py文件中定义变量、函数、类等等内容保存起来就是一个模块了。模块的名字就是这个py文件的文件名
因此这节课我们来学习定义一个简单的自己的模块吧!
定义模块练习我们就定义一个简单的函数吧,将下面的代码保存成`mymodule.py`文件吧:
```python
# coding:utf-8
def add_1(num):
return num + 1
```
这样我们就定义好了一个最简单的模块里面的函数就是其中一个成员我们可以在别的py文件中导入并使用将你的模块文件跟你的测试py文件放在同一个目录下即可。
---
### 模块的说明文档
除了可以给函数添加说明文档,你还可以给模块添加说明文档。在所有可执行的代码前面使用长文本字符串定义说明文档即可,我们在刚才的文件前面补充一下:
```python
# coding:utf-8
"""
模块名mymodule
小白同学的第一个模块
这是说明文档
命令add_1(num)
将传入的数字加上1后返回
"""
def add_1(num):
"""将传入的数字加上1后返回这是函数的文档"""
return num + 1
```
编写完成后,我们可以在其他地方导入该模块,使用`help`命令即可查看模块帮助文档,也可以访问模块的`__doc__`属性。
比如我们再在`同一个目录下`定义一个`test.py`文件:
```python
# coding:utf-8
import mymodule
help(mymodule)
print("*" * 40)
print(mymodule.__doc__)
print(mymodule.add_1(1))
```
我们还顺便测试了一下里面定义的函数。
> [!tip]
>
> 成功运行后,我们可以发现在模块所在目录下看到一个名为`__pycache__`的文件夹,里面会为模块生成一个`.pyc`文件这是python为模块编译生成的字节码文件是用来提升模块运行效率的你知道并忽略它即可将模块复制走的时候无需带上它。
---
### 模块的测试代码
> [!question]
>
> 模块写好之后,只能通过外部导入模块来进行测试吗?
非也别忘了模块本身也是一个python脚本文件它自己也能跑起来。我们可以自行在模块的文件中定义一些函数或者执行语句来测试我们编写的模块但如果写的是执行语句的话这些语句会在导入模块时运行一遍。但我们在使用时是不希望执行测试代码的。
别急python中有一种不错的机制可以满足你的需求。
> [!tip]
>
> python模块有一个内置的变量`__name__`,如果直接执行模块的代码,这个变量的值就为`__main__`,但如果是通过外部导入模块的方式,这个变量的值为模块的名字。
利用这个机制,我们可以在模块的结尾编写流程控制来区分是导入模块还是直接执行,看下如下模块代码:
```python
# coding:utf-8
"""
模块名mymodule
小白同学的第一个模块
这是说明文档
命令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))
```
这样如果是直接运行这段代码就会运行17~21行的部分代码了但如果是导入模块的话这部分代码就不会被执行。
> [!tip]
>
> `if __name__ == '__main__':`这种写法在你的一个普通的py脚本文件中也可以这么用的不一定是在模块中才能用。
### 单词释义
| 单词 | 释义 |
| -------- | ---------------------------------- |
| mymodule | my我的module模块我的模块的意思 |
| name | 名字 |
| main | 主要的 |