目录
- 专栏列表
- 前言
- 1. 模块基础
- 目录结构
- 示例模块 `mymodule.py`
- 2. 导入模块
- 3. 从模块中导入特定内容
- 3.1 `from … import *`
- 总结:
- 4. 包
- 示例包结构
- `moduleone.py`
- `moduletwo.py`
- `__init__.py`
- 导入包
- 5. 模块搜索路径
- 6. 内置模块
- 示例
- 7. 第三方库
- 8. `__name__` 属性
- 9. 初始化和清理
- 示例
- 10. 模块的 `__all__` 列表
- 总结
专栏列表
- Python教程(一):环境搭建及PyCharm安装
- Python 教程(二):语法与数据结构
- Python 教程(三):字符串特性大全
- Python 教程(四):Python运算符合集
- Python 教程(五):理解条件语句和循环结构
- Python 教程(六):函数式编程
- Python 教程(七):match…case 模式匹配
- Python 教程(八):高级特性【高逼格代码】
- Python 教程(九):内置模块与第三方模块
正文开始
,如果觉得文章对您有帮助,请帮我三连+订阅,谢谢
💖💖💖
前言
前面几章的代码我们都是新建一个
xxx.py
文件来练习,但是随着代码越来越多,我们希望把一些代码分离出去,但是又能进行整合,这样及不会臃肿又可以让代码进行重用
Python 3 的模块系统是其核心特性之一,它允许你将代码组织成可重用的单元。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,在Python中,一个
.py
文件就称之为一个模块(Module)。
1. 模块基础
模块是 Python 中的一个文件,后缀.py
,包含变量、函数和导入语句等。
- 创建模块:创建一个
.py
文件,文件名即模块名。 - 定义函数和变量:在模块文件中定义函数和变量。
目录结构
示例模块 mymodule.py
#!/usr/bin/env python3 #让这个文件可以直接在Unix/Linux/Mac上运行
# -*- coding: utf-8 -*- #文件编码设置
'这是一段注释'
def greet(name):
return f"Hello, {name}!"
PI = 3.14159
__name = 'ziyu'
# 私有变量
def __getname():
return __name
def area(radius):
return PI * radius ** 2
2. 导入模块
创建 module-test.py
文件, 使用 import
语句导入模块,并使用模块名
访问其内容。
# 两层含义, 1.导入了mymodule模块,2.定义了mymodule变量
import mymodule
print(mymodule.greet("张三"))
print(mymodule.PI)
circle = mymodule.area(5)
print(circle)
3. 从模块中导入特定内容
使用 from
关键字从模块中导入特定的函数、类或变量。
from mymodule import greet, PI
print(greet("Bob"))
print(PI)
3.1 from … import *
把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:
from mymodule import *
print(greet("张三"))
print(PI)
总结:
- 一个模块只会被导入一次,不管你执行了多少次 import。
- 类似
__xxx__
这样的变量是特殊变量
- 类似
_xxx
和__xxx
这样的函数或变量就是非公开的(private)
,不应该被直接引用,比如_abc,__abc
等;
4. 包
包是包含多个模块的目录,通常包含一个 __init__.py
文件, 解决的问题是 多模块中变量名冲突或者重复
, 包是一种管理 Python 模块命名空间
的形式
- 创建包:创建一个目录,目录名即包名,并在目录中创建
__init__.py
文件。 - 导入包:可以导入整个包或包中的特定模块。
示例包结构
mypackage/
__init__.py
moduleone.py
moduletwo.py
package-test.py
moduleone.py
def hello():
return 'module1'
moduletwo.py
def hello2():
return 'module2'
__init__.py
from … import *
语句, 把一个模块的所有内容全都导入
到当前的命名空间也是可行的
from moduleone import *
from moduletwo import *
导入包
创建
package-test.py
文件 , 添加下面的内容
import mypackage
print(mypackage.hello())
print(mypackage.hello2())
5. 模块搜索路径
Python 解释器在导入模块时会搜索模块文件,搜索路径由 sys.path
列表定义。
- 查看搜索路径:打印
sys.path
可以查看模块搜索路径。 - 修改搜索路径:可以通过修改
sys.path
来添加新的搜索路径。
import sys
print(sys.path)
sys.path.append('/path/to/my/modules')
6. 内置模块
Python 提供了许多内置模块,无需安装即可使用。
- 常用内置模块:如
math
、datetime
、json
等。
示例
import math
print(math.sqrt(16))
7. 第三方库
第三方库是 Python 社区提供的扩展模块,需要安装后才能使用。
- 安装第三方库:通常使用 pip 工具安装。
- 使用第三方库:安装后即可导入使用。
pip install requests
import requests
response = requests.get('https://api.github.com')
print(response.json())
8. __name__
属性
模块的 __name__
属性用于判断模块是被直接运行还是被导入。
if __name__ == "__main__":
print("这是模块是直接被运行的")
else:
print("这个模块是被导入运行的")
9. 初始化和清理
atexit
是 Python 中的一个模块,它提供了一个简单的接口来注册一些函数,这些函数将在 Python 程序正常退出时被调用。这通常用于执行清理工作,比如保存状态、关闭文件、释放资源等。
以下是 atexit
模块的基本用法:
-
注册函数:使用
atexit.register(func, *args, **kwargs)
来注册一个函数,该函数将在程序退出时被调用。func
是要注册的函数,*args
和**kwargs
是传递给该函数的参数。 -
程序退出:程序可以通过多种方式退出,包括正常退出(例如使用
sys.exit()
或程序达到末尾)或由于异常而退出。 -
清理操作:使用
atexit
模块或try...finally
结构。
示例
使用上面创建的
mypackage
包来测试
import mypackage
import atexit
def cleanup():
print("执行清理工作...")
def main():
print("程序开始执行。")
# 注册清理函数
atexit.register(cleanup)
# 程序主逻辑 ---
print(mypackage.hello())
print(mypackage.hello2())
if __name__ == "__main__":
main()
10. 模块的 __all__
列表
__all__
列表定义了模块中哪些名称会被 from module import *
导入。
__all__ = ['greet', 'PI', 'Circle']
总结
模块是 Python 代码组织的基础,通过合理使用模块,你可以编写更清晰、更可维护的代码。了解如何创建模块、导入模块、使用内置模块和第三方库是每个 Python 程序员的必备技能。希望这个梳理能帮助你更好地理解和使用 Python 3 的模块系统。如果你有任何问题或需要进一步的帮助,请随时联系我们。