AI(day10)模块化编程概念(模块、包、导入)及常见系统模块总结和第三方模块管理
核心概念
模块
- 本质:一个包含 Python 代码的 .py 文件
- 作用:组织相关功能(函数、类、变量)
- 示例:math.py(包含数学函数)、utils.py(自定义工具)
包
- 本质:包含
__init__.py
文件的特殊目录 - 作用:组织相关模块,形成层次结构
- 示例:
my_package/__init__.pymodule1.pymodule2.pysubpackage/__init__.pymodule3.py
导入机制
- import module: 导入整个模块 → import math → math.sqrt(4)
- from module import name: 导入特定对象 → from math import sqrt → sqrt(4)
- import module as alias: 设置别名 → import numpy as np → np.array()
关键实践技巧
1.导入优化
# 推荐
import numpy as np
from matplotlib import pyplot as plt# 避免(导致命名空间污染)
from math import *
from math import *
会导致命名空间污染,因为它无选择地将math
模块中所有的公开名字都引入当前命名空间,可能会覆盖已有名字,也会引入大量可能不需要的名字。因此,在编写正式代码时,应该避免使用这种导入方式,而使用显式导入。
示例:
pi = 3.14 # 自定义的pifrom math import * # 会导入math.pi,覆盖自定义的piprint(pi) # 输出3.141592653589793,而不是3.14
2.__init__.py
和__all__
妙用
-
__init__.py
的作用:
- 当导入包(
import package
)或使用from package import something
时,会执行__init__.py
文件。 - 在
__init__.py
中导入的内容会成为包级别的属性。
-
__all__
的作用:
- 当使用
from package import *
时,__all__
变量定义了哪些名称会被导入。 - 如果没有定义
__all__
,则不会导入任何名称(除了那些在__init__.py
中显式导入的,且非以下划线开头的名称)。
示例:如何通过__init__.py
简化导入路径
假设我们有如下包结构:
mypackage/__init__.pymodule1.pymodule2.py
其中,module1.py
内容:
def func1():print("Function 1 from module1")class Class1:passdef _True():pass
module2.py
内容:
def func2():print("Function 2 from module2")class Class2:pass
- 情况1:不使用
__init__.py
简化导入
用户需要这样导入:
from mypackage.module1 import func1, Class1
from mypackage.module2 import func2, Class2
- 情况2:在
__init__.py
中简化导入
在mypackage/__init__.py
中:
from .module1 import *
from .module2 import *
# 定义__all__,这样使用 from mypackage import * 时,会导入这四个名称
__all__ = ['func1','Class1','func2','Class2','_True','_true'
]def _true():print("_ture")
这样,用户就可以直接这样导入:
from mypackage import func1, Class1, func2, Class2
或者使用 * 导入(因为我们在__all__中定义了)
from mypackage import *
func1() # 直接使用func1,而不需要写mypackage.module1.func1
_True() # 用__all__定义也不能使用,下划线开头属于module1.py私有属性
_true() # _true()定义在__init__.py内部,用__all__定义也能使用
常用系统模块速查表
模块名 | 主要功能 | 典型用法示例 |
---|---|---|
os | 操作系统交互 | os.listdir(), os.path.join() |
sys | Python解释器交互 | sys.argv, sys.exit() |
math | 数学运算 | math.sin(), math.pi |
datetime | 日期时间处理 | datetime.now(), timedelta |
json | JSON数据编码/解码 | json.loads(), json.dump() |
re | 正则表达式操作 | re.search(), re.findall() |
random | 生成随机数 | random.randint(), random.choice() |
urllib.request | 网络请求 | urllib.request.urlopen() |
collections | 扩展数据类型 | deque, namedtuple, Counter |
argparse | 命令行参数解析 | 创建命令行工具必备 |
第三方模块管理
1.pip - 包安装工具
# 安装包
pip install requests numpy pandas# 安装特定版本
pip install Django==3.2.18# 升级包
pip install --upgrade pandas# 卸载包
pip uninstall package-name
2.虚拟环境(必备实践)
-
作用:隔离项目依赖,防止版本冲突
-
创建与激活:
# 创建
python -m venv myenv# 激活 (Windows)
myenv\Scripts\activate# 激活 (macOS/Linux)
source myenv/bin/activate
3.依赖管理
- 生成依赖清单:
pip freeze > requirements.txt
- 安装项目所有依赖:
pip install -r requirements.txt