35.玩转Linux操作系统
好的,我们继续输出剩余部分的教学内容,从第五模块开始。
五、collections模块:Python内置的高效数据结构
教学内容讲解
collections
模块提供了多种替代内建容器的数据结构,提升代码效率与可读性。
常用结构及功能:
数据结构 | 功能说明 |
---|---|
Counter |
计数器,用于统计可哈希对象的数量 |
defaultdict |
带默认值的字典,避免 KeyError |
OrderedDict |
保留插入顺序的字典(Python 3.6+ 默认支持) |
deque |
双端队列,适合队列/栈操作 |
namedtuple |
可命名字段的元组,提升代码可读性 |
ChainMap |
将多个映射合并为一个视图 |
示例:
from collections import Counter, defaultdict, deque, namedtuple
# Counter:统计字符频率
cnt = Counter('mississippi')
print(cnt['s']) # 输出 4
# defaultdict:防止KeyError
dd = defaultdict(int)
dd['x'] += 1 # 自动初始化为0再加1
# deque:两端添加高效
dq = deque([1, 2, 3])
dq.appendleft(0)
dq.append(4)
# namedtuple:具名元组
Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p.x, p.y)
使用场景
- 字符频率分析 / 投票计数
- 滑动窗口算法(deque)
- 数据清洗 / 日志分类(defaultdict)
最佳实践
Counter.most_common(n)
可获取 Top-N 出现频率元素- 替代传统字典时优先考虑
defaultdict
提高健壮性 deque
是线程安全的栈/队列结构
六、高阶函数与装饰器:函数式编程的利器
教学内容讲解
高阶函数是指接受函数作为参数或返回函数作为结果的函数,Python 中大量内置函数如 map()
、filter()
、sorted()
均支持函数式操作。
示例:
# 高阶函数 map + lambda
nums = [1, 2, 3]
squared = list(map(lambda x: x**2, nums))
# 装饰器:在函数执行前后加行为
def log(func):
def wrapper(*args, **kwargs):
print(f'Calling {func.__name__}...')
return func(*args, **kwargs)
return wrapper
@log
def greet(name):
print(f'Hello, {name}!')
greet('Alice')
使用场景
- 日志注入 / 权限检查(如 Flask 中的路由装饰器)
- 高阶构造逻辑(函数返回函数,动态组合逻辑)
- 并发控制、缓存管理等横切逻辑抽象
最佳实践
- 使用
functools.wraps
保留原函数元信息 - 装饰器内部可做认证、记录日志、异常捕获等
- 匿名函数(lambda)应简洁,勿滥用
七、面向对象设计模式
教学内容讲解
Python 虽然是一种多范式语言,但对面向对象支持非常强。理解面向对象三大特性(封装、继承、多态)和常见设计模式有助于组织大型项目代码。
示例模式:
- 单例模式(Singleton)
- 工厂模式(Factory)
- 装饰器模式(Decorator)
- 策略模式(Strategy)
简单工厂示例:
class Dog:
def speak(self):
return "Woof"
class Cat:
def speak(self):
return "Meow"
def animal_factory(name):
return Dog() if name == "dog" else Cat()
animal = animal_factory("cat")
print(animal.speak()) # Meow
使用场景
- 游戏角色创建(工厂模式)
- 权限体系(策略模式)
- 应用配置(单例模式)
最佳实践
- 合理使用抽象类(
abc
模块) - 模块内组织类使用清晰的层级关系
- 多重继承需谨慎,避免菱形继承结构
八、迭代器与生成器:惰性计算与大数据处理的核心
教学内容讲解
迭代器是实现了 __iter__()
和 __next__()
的对象,生成器是创建迭代器的快捷方式,使用 yield
。
示例:
def countdown(n):
while n > 0:
yield n
n -= 1
for x in countdown(3):
print(x)
使用场景
- 分批读取大文件
- 数据库分页加载
- 网络流式数据处理(如 socket/日志处理)
最佳实践
- 使用
yield
替代大列表,降低内存 - 遇到“无限流”场景优先用生成器
itertools
是生成器的好搭档
九、并发编程基础:多线程/多进程与异步IO
教学内容讲解
Python 提供了三种主流并发方式:
并发方式 | 模块 | 适合场景 |
---|---|---|
多线程 | threading |
I/O密集型,如文件/网络 |
多进程 | multiprocessing |
CPU密集型,如图像处理 |
协程/异步 | asyncio |
高并发,少阻塞,如网络爬虫 |
示例:多线程下载模拟
import threading
def task(name):
print(f'{name} downloading...')
threads = []
for i in range(3):
t = threading.Thread(target=task, args=(f'Thread-{i}',))
threads.append(t)
t.start()
示例:异步 IO
import asyncio
async def say_hello():
await asyncio.sleep(1)
print("Hello after 1 second")
asyncio.run(say_hello())
使用场景
- 网络爬虫 / API 请求(asyncio + aiohttp)
- 多核计算任务(multiprocessing)
- GUI / 后台任务并发执行
最佳实践
- 避免在多线程中使用共享变量(使用锁)
- 异步IO中避免阻塞操作(使用异步版本)
- 使用
concurrent.futures
实现线程池/进程池
十、总结与提升建议
学习建议
- 掌握每个模块的核心API + 实战技巧
- 熟练使用
Python Tutor
、IPython
和调试器进行调试与可视化理解 - 查阅官方文档 & 学习优秀开源项目(如 Flask、Requests、Scrapy)
- 配合
pytest
单元测试提升代码鲁棒性
工具推荐
工具 | 作用 |
---|---|
Python Tutor | 代码可视化执行 |
ipdb / pdb |
逐行调试 Python 程序 |
Black / isort |
代码格式化工具 |
Jupyter Notebook |
可交互的编程学习平台 |
如果你希望我整理为 PDF 或交互文档形式,或想对某部分深入讲解(如 asyncio 应用、装饰器高级语法等),请随时告诉我。是否还需要我补充练习题或实战项目建议?