Python快速学习——第11章:模块

第十一章:模块

11.1 什么是模块?

模块就像 一个装满工具的箱子 ,每个模块都包含了一组相关的函数变量,可以帮助我们组织代码,实现代码的复用。Python中的模块实际上就是一个.py文件。

python 复制代码
# 使用内置math模块。
import math;
​
# 使用math模块中的函数。
print(math.sqrt(16));  # 4.0。
print(math.pi);        # 3.141592653589793。

11.2 为什么使用模块?

11.2.1 代码组织

模块帮助我们将代码分成逻辑单元:

markdown 复制代码
my_project/
├── main.py
├── utils/
│   ├── __init__.py
│   ├── file_utils.py
│   └── math_utils.py
└── models/
    ├── __init__.py
    ├── user.py
    └── product.py

11.2.2 代码复用

避免重复编写相同的代码:

python 复制代码
# 在不同项目中重用工具函数
from utils.math_utils import calculate_average
​
scores = [85, 92, 78, 90, 88]
average = calculate_average(scores)
print(f"平均分:{average}")

11.2.3 命名空间管理

避免命名冲突:

python 复制代码
import math
import statistics
​
# 不同模块可以有相同名称的函数
math.mean([1, 2, 3])        # math模块的mean函数
statistics.mean([1, 2, 3])  # statistics模块的mean函数

11.3 导入模块的方式

11.3.1 基本导入

python 复制代码
# 导入整个模块。
import math;
print(math.sqrt(25));
​
# 导入模块并指定别名。
import math as m;
print(m.sqrt(25));
​
# 导入特定函数/类。
from math import sqrt, pi;
print(sqrt(25));
print(pi);
​
# 导入所有内容(不推荐,可能导致命名冲突)。
from math import *;
print(sqrt(25));

运行结果:

复制代码
5.0
5.0
5.0
3.141592653589793
5.0

11.3.2 相对导入(在包内部)

在包内部的模块中使用相对导入:

python 复制代码
# 在 utils/math_utils.py 中
from . import file_utils  # 导入同级的file_utils模块
from ..models import user  # 导入上级models包中的user模块

11.4 Python标准库常用模块

11.4.1 math - 数学运算

python 复制代码
import math
​
# 基本数学函数
print(math.ceil(4.2))    # 5 - 向上取整
print(math.floor(4.8))   # 4 - 向下取整
print(math.fabs(-5))     # 5.0 - 绝对值
print(math.factorial(5)) # 120 - 阶乘
​
# 幂和对数
print(math.pow(2, 3))    # 8.0 - 幂运算
print(math.sqrt(16))     # 4.0 - 平方根
print(math.log(100, 10)) # 2.0 - 对数
​
# 三角函数
print(math.sin(math.pi/2))  # 1.0
print(math.cos(math.pi))    # -1.0
​
# 常数
print(math.pi)    # 3.141592653589793
print(math.e)     # 2.718281828459045

11.4.2 random - 随机数

python 复制代码
import random
​
# 生成随机数
print(random.random())          # 0.0到1.0之间的随机浮点数
print(random.uniform(1, 10))    # 1到10之间的随机浮点数
print(random.randint(1, 6))     # 1到6之间的随机整数(包括6)
​
# 序列操作
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
print(random.choice(fruits))    # 随机选择一个元素
print(random.sample(fruits, 2)) # 随机选择2个不重复的元素
random.shuffle(fruits)          # 打乱序列顺序
print(fruits)

11.4.3 datetime - 日期时间

python 复制代码
import datetime
​
# 获取当前时间
now = datetime.datetime.now()
print(f"当前时间:{now}")
print(f"年份:{now.year}")
print(f"月份:{now.month}")
print(f"日期:{now.day}")
​
# 创建特定日期
birthday = datetime.datetime(1990, 5, 15)
print(f"生日:{birthday}")
​
# 时间计算
tomorrow = now + datetime.timedelta(days=1)
print(f"明天:{tomorrow}")
​
# 日期格式化
formatted = now.strftime("%Y-%m-%d %H:%M:%S")
print(f"格式化时间:{formatted}")
​
# 字符串转日期
date_str = "2023-12-25"
christmas = datetime.datetime.strptime(date_str, "%Y-%m-%d")
print(f"圣诞节:{christmas}")

11.4.4 os - 操作系统接口

python 复制代码
import os
​
# 文件和目录操作
print(os.getcwd())  # 获取当前工作目录
​
# 创建目录
os.makedirs("my_folder/sub_folder", exist_ok=True)
​
# 列出目录内容
print(os.listdir("."))  # 当前目录内容
​
# 检查路径是否存在
print(os.path.exists("my_folder"))  # True
​
# 路径操作
file_path = os.path.join("my_folder", "sub_folder", "file.txt")
print(f"文件路径:{file_path}")
​
# 环境变量
print(os.environ.get("PATH", "未找到PATH环境变量"))

11.4.5 sys - 系统相关参数

python 复制代码
import sys
​
# 命令行参数
print(f"脚本名称:{sys.argv[0]}")
print(f"参数列表:{sys.argv[1:]}")
​
# Python解释器信息
print(f"Python版本:{sys.version}")
print(f"平台:{sys.platform}")
​
# 退出程序
if len(sys.argv) < 2:
    print("需要提供参数")
    sys.exit(1)  # 非零退出码表示错误
​
# 模块搜索路径
print("模块搜索路径:")
for path in sys.path:
    print(f"  {path}")

11.4.6 json - JSON数据处理

python 复制代码
import json
​
# Python对象转JSON字符串
data = {
    "name": "张三",
    "age": 25,
    "courses": ["数学", "英语", "编程"],
    "is_student": True
}
​
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print("JSON字符串:")
print(json_str)
​
# JSON字符串转Python对象
parsed_data = json.loads(json_str)
print(f"姓名:{parsed_data['name']}")
​
# 读写JSON文件
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)
​
with open("data.json", "r", encoding="utf-8") as f:
    loaded_data = json.load(f)
    print(f"从文件加载:{loaded_data['name']}")

11.5 创建自己的模块

11.5.1 创建简单模块

创建一个名为 my_math.py 的文件:

python 复制代码
# my_math.py
"""一个简单的数学工具模块"""
​
def add(a, b):
    """计算两个数的和"""
    return a + b
​
def multiply(a, b):
    """计算两个数的积"""
    return a * b
​
def factorial(n):
    """计算阶乘"""
    if n == 0:
        return 1
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result
​
# 模块级别的常量
PI = 3.14159
VERSION = "1.0.0"

在其他文件中使用这个模块:

python 复制代码
# main.py
import my_math
​
print(my_math.add(5, 3))        # 8
print(my_math.multiply(4, 6))   # 24
print(my_math.factorial(5))     # 120
print(my_math.PI)               # 3.14159

11.5.2 创建包

包是包含多个模块的目录,需要包含 __init__.py 文件:

markdown 复制代码
my_package/
├── __init__.py
├── math_utils.py
└── string_utils.py

__init__.py 文件可以是空文件,也可以包含初始化代码:

python 复制代码
# my_package/__init__.py
"""我的工具包"""
​
from .math_utils import add, multiply
from .string_utils import reverse_string
​
__version__ = "1.0.0"
__all__ = ['add', 'multiply', 'reverse_string']

11.6 模块的搜索路径

Python按照以下顺序搜索模块:

  1. 当前目录
  2. 环境变量PYTHONPATH指定的目录
  3. Python标准库目录
  4. 第三方库目录(site-packages)
python 复制代码
import sys
​
# 查看模块搜索路径
for path in sys.path:
    print(path)
​
# 添加自定义路径
sys.path.append("/path/to/my/modules")

本章笔记:

  • 模块是组织Python代码的基本单位,通常是一个.py文件。
  • 使用模块可以提高代码的可维护性、可重用性和可读性。
  • Python有多种导入模块的方式:import、from...import、别名导入等。
  • Python标准库提供了丰富的模块,如math、random、datetime、os等。
  • 可以创建自己的模块和包来组织代码。
  • 模块搜索路径决定了Python如何找到要导入的模块。
相关推荐
weixin_424999362 小时前
如何用SQL按条件计算移动求和_结合CASE与窗口函数
jvm·数据库·python
AI玫瑰助手2 小时前
Python基础:字符串的常用内置方法(查找替换分割)
android·开发语言·python
21439652 小时前
持久化存储如何适配不同浏览器?解决隐私模式下存储失败的指南
jvm·数据库·python
justjinji2 小时前
c++怎么读取大端序设备的固件bin文件_字节反转与位移操作【详解】
jvm·数据库·python
shark22222222 小时前
Python中的简单爬虫
爬虫·python·信息可视化
m0_515098422 小时前
如何处理视图中的Definer_视图创建者权限变更对视图有效性的影响
jvm·数据库·python
2401_883600252 小时前
如何创建物化视图_CREATE MATERIALIZED VIEW基本语法与数据填充
jvm·数据库·python
浔川python社2 小时前
《浔川社团关于原计划后期将暮烟合作程序全部自研的说明》
python·青少年编程
浔川python社2 小时前
《浔川社团取消与暮烟社团合作公告》
python