> 送给自己一句话:Python 不难,难的是坚持;编程不难,难的是动手,祝你早日学成 Python,实现自己的目标
*学习的脚步不要停歇,因为时代在进步我们更要进步,学到老活到老。希望能和大家共同成长,也希望有任何问题,大家评论、私信,一起交流进步
一个上进心极强的入门小白,虽然之前的文章总是更新着会断更,但是我相信这次我能把python这门语言能啃下来
如果超过两天断更了,更幸运的是你看到了这里,希望能够在最后一篇文章的评论区去催更,在这里感谢你的催更*
> 点赞评论催更是我更新的最大动力!这样是代表着我被人看到了。
---
# 模块
## 什么是模块?
模块:就是一系列功能的集合体
1. 内置模块:在安装python解释器的时候就已经安装完成了(比如:time模块、os模块等)
2. 第三方模块:别人开源的封装好的模块
3. 自定义模块:自己写的后缀py的文件
将多个py后缀的文件放置在一个文件夹中这个文件夹就是包(库)**需要注意的是在包中一定需要存在一个__init__.py的文件**
在同一个python文件中为了减少代码的冗余和阅读性,我们使用函数对重复的代码片段进行组合,同样的原因我们在多个文件中使用重复功能为减少冗余,我们将重复功能封装在模块中,调用不同模块中功能减少重复
## 怎么调用模块
模块的调用分为两种方式
```python# -*- coding: utf-8 -*-'''@File : 模块.py@Author : HY @Version : 1.0@Desc : None'''import default # 这是一种调用方式from default import func1 # 这是第二种调用方式res = default.func2(8,9) # 这样会每次在使用模块中功能时候都要用模块名.功能()这样对于短的模块名比较友好,如果很长我们可以给模块名改个名字# import default as d# 同理 res = default.func2(8,9)等同于res = d.func2(8,9)func1()print(res)'''@OutPut : 导入成功func2func117'''```
在使用import导入的时候被导入的模块会执行一次(只有在第一次被导入的时候会执行一次,为了创建名称空间,之后即使导入多少次也不会执行)
自定义模块想要测试功能但是在被调用的时候不能够执行那就需要在自定义的时候使用__name__="__ main __ "进行判断是否为执行的调用
```python# -*- coding: utf-8 -*-'''@File : default.py@Author : HY @Version : 1.0@Desc : 本模块名为default'''def func1(): print("func1")def func2(x,y): print("func2") return x+ym=3n=2print("导入成功")if __name__=="__main__": func1() res=func2(5,6) print(res)'''@OutPut : 导入成功func1func211'''```
> [!note] tips
> 文件被当做程序单独运行的时候--name--会被python赋值为--main--
> 文件被当做模块调用的时候会被赋值为模块名
> [!note] tips
> 在使用模块的时候一般将内置模块名放在最上边、第三方模块放置在内置模块下边、自定义模块放在第三方模块下边
> 不用这个规则程序依旧会照常运行,但是别人一般找不出规律,不易阅读
## 模块什么时候被回收
模块的名称空间什么时候会被回收呢?
当前引用模块的这个py文件执行完毕后模块随着引用文件的回收模块就被回收了
也可以进行人为的回收
```python# -*- coding: utf-8 -*-'''@File : 模块.py@Author : HY @Version : 1.0@Desc : None'''import defaultres = default.func2(8,9)print(res)del default # 这里人为进行回收default.func2(2,5) # 这里会报错NameError: name 'default' is not defined```
本文章使用的自定义模块代码如下
```python# -*- coding: utf-8 -*-'''@File : default.py@Author : HY @Version : 1.0@Desc : 本模块名为default'''def func1(): print("func1")def func2(x,y): print("func2") return x+ym=3n=2print("导入成功")```