Python 模块详解
在开发过程中,随着代码量的增加,将所有逻辑写在一个文件中会导致文件过长且难以维护。函数和类提供了封装能力,而模块则是代码组织的更高层级抽象。Python 模块是指一个包含 Python 定义和语句的文件,它可以被其他程序导入和使用,旨在减少代码重复、提高可读性和可复用性,并有效组织管理代码。
1. 模块创建
除了使用标准库或第三方模块,开发者也可以自定义模块。创建一个模块非常简单,只需将代码保存为 .py 文件即可。
Python 模块是包含 Python 定义和语句的文件,用于减少代码重复、提高可读性和可复用性。本文详细介绍了模块的创建、导入方式(import/from)、特殊属性(__name__)、搜索路径(sys.path)、命名空间与作用域机制。此外还涵盖了包(Package)的组织形式、常用内置模块介绍以及 PIP 包管理器的使用方法,包括虚拟环境的配置与最佳实践建议,帮助开发者规范地组织和管理 Python 代码。

在开发过程中,随着代码量的增加,将所有逻辑写在一个文件中会导致文件过长且难以维护。函数和类提供了封装能力,而模块则是代码组织的更高层级抽象。Python 模块是指一个包含 Python 定义和语句的文件,它可以被其他程序导入和使用,旨在减少代码重复、提高可读性和可复用性,并有效组织管理代码。
除了使用标准库或第三方模块,开发者也可以自定义模块。创建一个模块非常简单,只需将代码保存为 .py 文件即可。
例如,创建一个名为 mymodule.py 的模块文件:
def greeting(name):
print("Hello, " + name)
person = {
"name": "Alice",
"age": 25,
"country": "USA"
}
在另一个 Python 文件中导入并使用该模块:
import mymodule
mymodule.greeting("Bob")
print(mymodule.person["name"])
要使用 Python 的模块,必须先导入它。Python 支持多种导入方式:
import somemodulefrom somemodule import somefunctionfrom somemodule import func1, func2from somemodule import *(不推荐,易造成命名冲突)__import__('somemodule')示例(以 math 模块为例):
import math
print(math.pi)
from math import pi
print(pi)
# 动态导入
import importlib
math_module = importlib.import_module('math')
print(math_module.pi)
模块属性是指在模块中定义的变量、函数或类。它们是模块的基本组成单位。
# module1.py
x = 10
def func():
print("Hello, world!")
class MyClass:
def __init__(self, name):
self.name = name
def say_hello(self):
print(f"Hello, {self.name}!")
在其他模块中使用:
import module1
print(module1.x)
module1.func()
obj = module1.MyClass("John")
obj.say_hello()
注意:模块中定义的属性属于模块命名空间,访问时需加模块名前缀,除非使用 from ... import。
__name__ 属性__name__ 是 Python 内置的特殊变量,表示当前模块的名字。
__name__ 的值为 "__main__"。__name__ 的值为模块文件名。利用这一特性,可以编写既可作为脚本运行又可作为模块导入的代码:
def test():
print("This is a demo function")
if __name__ == "__main__":
test()
Python 解释器通过 sys.path 列表查找模块文件。
import sys
print(sys.path)
可以通过环境变量 PYTHONPATH 或在代码中修改 sys.path 来添加自定义路径:
import sys
sys.path.append("/path/to/my/modules")
import:导入整个模块。from ... import:从模块导入指定成员。as:给模块或成员起别名,如 import math as m。dir():返回对象的所有属性和方法列表,用于查看模块内容。reload() / importlib.reload():重新加载已导入的模块。在 Python 3 中,需使用 importlib.reload(module)。修改模块文件后,再次导入不会自动生效,因为 Python 缓存了编译后的字节码。此时可使用 importlib.reload() 强制重新加载:
import importlib
import mymodule
# 修改 mymodule 代码后
importlib.reload(mymodule)
注意:reload() 仅适用于已加载过的模块。
Python 中有三种作用域:
print, len)。查找顺序遵循 LEGB 规则:Local -> Enclosing -> Global -> Built-in。
包是一种管理模块命名空间的形式,采用'点模块名称'结构(如 A.B)。
__init__.py 文件(可为空),否则 Python 无法识别为包。导入示例:
import mypackage.mymodule
# 或
from mypackage import mymodule
math:数学运算(三角函数、常数等)。datetime:日期和时间操作。os:操作系统接口(文件、目录、环境变量)。random:生成随机数。requests:HTTP 请求处理。re:正则表达式。json:JSON 数据格式处理。PIP 是 Python 的官方包安装工具,用于管理第三方库。
通常 Python 3.4+ 自带 pip。检查版本:
pip --version
pip install package_namepip install --upgrade package_namepip uninstall package_namepip listpip freeze > requirements.txtpip install -r requirements.txt国内用户常使用镜像源加速下载,如清华源:
pip install package_name -i https://pypi.tuna.tsinghua.edu.cn/simple
为避免依赖冲突,建议使用虚拟环境(venv)隔离项目依赖:
python -m venv venv_env
source venv_env/bin/activate # Linux/Mac
venv_env\Scripts\activate # Windows
激活后安装的包仅在当前环境中有效。
在包内部,可以使用相对导入来引用同一包下的其他模块,这比绝对导入更灵活。
# mypackage/submodule.py
from . import parent_module
from ..other_package import other_func
__all__ 变量明确模块导出的公开接口。通过合理使用模块和包,可以构建结构清晰、易于维护和扩展的 Python 应用程序。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online