常用内建模块
Python标准库提供了丰富的模块,无需额外安装即可使用。本章介绍最常用的日期时间、容器、迭代器、哈希等模块。
datetime 日期时间模块
datetime 是Python处理日期和时间的核心模块。
┌─────────────────────────────────────────────────────────────────┐
│ datetime 模块类结构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ datetime │
│ ├── date - 日期(年、月、日) │
│ ├── time - 时间(时、分、秒、微秒) │
│ ├── datetime - 日期+时间 │
│ ├── timedelta - 时间间隔(用于计算) │
│ └── timezone - 时区 │
│ │
└─────────────────────────────────────────────────────────────────┘
1. date 类
Python
from datetime import date, datetime, timedelta
# 创建日期
today = date.today()
print(f"今天: {today}") # 2026-01-15
print(f"年: {today.year}") # 2026
print(f"月: {today.month}") # 1
print(f"日: {today.day}") # 15
# 创建特定日期
d = date(2026, 12, 25)
print(d) # 2026-12-25
# 日期比较
d1 = date(2026, 1, 1)
d2 = date(2026, 12, 31)
print(d1 < d2) # True
2. datetime 类
Python
from datetime import datetime, timedelta
# 当前时间
now = datetime.now()
print(now) # 2026-01-15 10:30:45.123456
# 创建特定时间
dt = datetime(2026, 6, 1, 12, 30, 0)
print(dt) # 2026-06-01 12:30:00
# 格式化输出
print(now.strftime("%Y-%m-%d %H:%M:%S")) # 2026-01-15 10:30:45
print(now.strftime("%Y年%m月%d日 %H:%M")) # 2026年01月15日 10:30
# 解析字符串
dt_str = "2026-06-01 12:30:00"
parsed = datetime.strptime(dt_str, "%Y-%m-%d %H:%M:%S")
print(parsed) # 2026-06-01 12:30:00
3. timedelta 时间计算
Python
from datetime import datetime, timedelta
# 时间加减
now = datetime.now()
tomorrow = now + timedelta(days=1)
yesterday = now - timedelta(days=1)
print(f"明天: {tomorrow}")
print(f"昨天: {yesterday}")
# 时间差计算
dt1 = datetime(2026, 1, 1)
dt2 = datetime(2026, 1, 15)
diff = dt2 - dt1
print(f"相差天数: {diff.days}") # 14
print(f"相差秒数: {diff.total_seconds()}")
# 实用示例:过期时间计算
expires = now + timedelta(hours=24)
print(f"24小时后过期: {expires}")
collections 容器模块
1. Counter 计数器
Python
from collections import Counter
# 计数
cnt = Counter(["a", "b", "c", "a", "b", "a"])
print(cnt) # Counter({'a': 3, 'b': 2, 'c': 1})
print(cnt["a"]) # 3
# 字符串计数
text = "hello world"
char_cnt = Counter(text)
print(char_cnt) # Counter({'l': 2, 'o': 2, 'h': 1, 'e': 1, ...})
# 常用方法
print(cnt.most_common(2)) # [[('a', 3), ('b', 2)] - 最常见的2个
print(list(cnt.elements())) # ['a', 'a', 'a', 'b', 'b', 'c']
2. defaultdict 默认值字典
Python
from collections import defaultdict
# 自动创建默认值
dd = defaultdict(int)
dd["count"] += 1 # 不需要先检查键是否存在
print(dd["count"]) # 1
print(dd["new"]) # 0 (自动创建,默认值)
# 列表型默认值 - 自动创建空列表
dd_list = defaultdict(list)
dd_list["fruits"].append("apple")
dd_list["fruits"].append("banana")
print(dd_list["fruits"]) # ['apple', 'banana']
# 分组统计
words = ["hello", "world", "hello", "python"]
grouped = defaultdict(list)
for word in words:
grouped[word[0]].append(word)
print(dict(grouped)) # {'h': ['hello', 'hello'], 'w': ['world'], 'p': ['python']}
3. namedtuple 命名元组
Python
from collections import namedtuple
# 定义命名元组类型
Point = namedtuple("Point", ["x", "y"])
# 创建实例
p = Point(10, 20)
print(p.x, p.y) # 10 20
print(p[0], p[1]) # 10 20 (支持索引)
print(p._asdict()) # {'x': 10, 'y': 20}
# 学生记录
Student = namedtuple("Student", ["name", "age", "grade"])
s = Student("张三", 20, "A")
print(f"{s.name}, {s.age}岁, 等级{s.grade}")
itertools 迭代器模块
1. 无限迭代器
Python
from itertools import count, cycle, repeat
# count - 无限计数器
for i, num in zip(range(5), count(10)):
print(num, end=" ") # 10 11 12 13 14
# cycle - 无限循环
for i, c in zip(range(6), cycle("AB")):
print(c, end="") # ABABAB
# repeat - 重复元素
print(list(repeat(5, 3))) # [5, 5, 5]
2. 组合迭代器
Python
from itertools import product, permutations, combinations
# product - 笛卡尔积
print(list(product("AB", "12"))) # [[('A', '1'), ('A', '2'), ('B', '1'), ('B', '2')]
# permutations - 排列
print(list(permutations("ABC", 2))) # [[('A','B'), ('A','C'), ('B','A'), ('B','C'), ('C','A'), ('C','B')]
# combinations - 组合
print(list(combinations("ABC", 2))) # [[('A','B'), ('A','C'), ('B','C')]
3. chain 链接迭代器
Python
from itertools import chain
# 链接多个迭代器
combined = list(chain([1, 2], [3, 4], [5]))
print(combined) # [1, 2, 3, 4, 5]
# 类似 sum 但用于拼接
# chain.from_iterable - 展平嵌套
nested = [[1, 2], [3, 4], [5]]
flattened = list(chain.from_iterable(nested))
print(flattened) # [1, 2, 3, 4, 5]
hashlib 哈希模块
hashlib 提供常见的哈希算法,用于密码存储、数据完整性验证等。
┌─────────────────────────────────────────────────────────────────┐
│ 哈希算法特点对比 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 算法 输出长度 安全性 速度 典型用途 │
│ ───────────────────────────────────────────────────── │
│ MD5 128位(16B) 低 快 数据校验(不推荐密码) │
│ SHA-1 160位(20B) 中 快 数字签名(不推荐) │
│ SHA-256 256位(32B) 高 中 密码、证书 │
│ SHA-512 512位(64B) 很高 慢 高安全需求 │
│ │
└─────────────────────────────────────────────────────────────────┘
Python
import hashlib
# 基本哈希
msg = b"hello"
print(hashlib.md5(msg).hexdigest())
print(hashlib.sha1(msg).hexdigest())
print(hashlib.sha256(msg).hexdigest())
print(hashlib.sha512(msg).hexdigest())
# 字符串哈希(需编码)
text = "你好"
h = hashlib.sha256(text.encode("utf-8")).hexdigest()
print(h)
# 分块更新(适合大文件)
def hash_file(filepath):
h = hashlib.sha256()
with open(filepath, "rb") as f:
for chunk in iter(lambda: f.read(1024), b""):
h.update(chunk)
return h.hexdigest()
# 带盐值的哈希(用于密码存储)
import secrets
salt = secrets.token_hex(16)
password = "my_password"
hashed = hashlib.pbkdf2_hmac("sha256", password.encode(), salt.encode(), 100000).hex()
print(f"盐值: {salt}")
print(f"哈希: {hashed}")
random 随机模块
Python
import random
# 随机整数
print(random.randint(1, 100)) # 1-100 之间的随机整数
print(random.randrange(0, 101, 2)) # 0-100 之间的随机偶数
# 随机浮点数
print(random.random()) # 0-1 之间的随机浮点数
print(random.uniform(1, 10)) # 1-10 之间的随机浮点数
# 随机选择
fruits = ["apple", "banana", "orange", "grape"]
print(random.choice(fruits)) # 随机选择一个
print(random.sample(fruits, 2)) # 随机选择多个
random.shuffle(fruits) # 打乱顺序
# 随机种子(可重现)
random.seed(42)
print(random.random()) # 每次 seed(42) 后结果相同
os 和 sys 模块
os 模块 - 操作系统相关
Python
import os
# 路径操作
print(os.getcwd()) # 当前工作目录
print(os.path.exists("file.txt")) # 文件是否存在
print(os.path.join("dir", "file.txt")) # 路径拼接
# 目录操作
os.makedirs("new_dir", exist_ok=True) # 创建目录
os.rmdir("empty_dir") # 删除空目录
# 文件信息
print(os.path.getsize("file.txt")) # 文件大小(字节)
print(os.path.split("/path/to/file.txt")) # 分割路径和文件名
sys 模块 - Python解释器相关
Python
import sys
# Python版本
print(sys.version)
print(sys.executable) # Python 解释器路径
# 模块搜索路径
print(sys.path)
# 命令行参数
# sys.argv[0] 是脚本名,argv[1:] 是传入的参数
# 退出程序
# sys.exit(0) # 正常退出
# sys.exit(1) # 异常退出
# stdin/stdout/stderr
sys.stdout.write("Hello stdout\n")
sys.stderr.write("Error message\n")
知识测验
问题1:如何计算两天日期之间的天数差?
问题2:以下哪个适合存储用户密码?
课后练习
练习1:日期计算器
实现一个日期计算器:
- 计算给定日期是星期几
- 计算两个日期之间的天数
- 计算N天后的日期
- 格式化输出各种日期格式
练习2:单词统计
使用 Counter 实现单词统计:
- 统计一段文本中单词出现频率
- 找出最常见的5个单词
- 使用 defaultdict 按首字母分组
练习3:密码生成器
实现一个安全的密码生成器:
- 生成指定长度的随机密码
- 包含大小写字母、数字、特殊字符
- 使用 secrets 模块生成安全随机数
🐍 Python 在线代码编辑器
📝 运行结果