Skip to content

高级特性 Advanced Features

欢迎来到 Python 高级特性章节!在这里,你将学习 Python 的强大特性,这些特性能让你的代码更优雅、更高效、更易维护。

为什么学习高级特性?

作为前端开发者,你已经熟悉了一些高级编程概念:

前端概念Python 对应学习曲线
高阶组件 (HOC)装饰器 (Decorators)⭐⭐ 中等
Generator 函数生成器 (Generators)⭐⭐ 中等
try...finally上下文管理器 (with)⭐ 简单
Promise/async-awaitasyncio/async-await⭐⭐⭐ 中等

学习目标

完成本章节后,你将能够:

  • ✅ 使用装饰器增强函数和类的功能
  • ✅ 编写内存高效的生成器处理大数据集
  • ✅ 创建自定义上下文管理器管理资源
  • ✅ 使用 asyncio 编写高性能的异步代码

章节内容

1. 装饰器 (Decorators)

装饰器是 Python 的强大特性,用于在不修改原函数的情况下增强其功能,类似 React 的高阶组件 (HOC)。

核心概念:

  • 函数装饰器和类装饰器
  • @decorator 语法糖
  • functools.wraps 保留元数据
  • 带参数的装饰器
  • 装饰器堆叠

常见应用:

  • 日志记录
  • 性能计时
  • 缓存 (memoization)
  • 权限检查
  • 重试逻辑
python
from functools import lru_cache

@lru_cache(maxsize=128)
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

print(fibonacci(100))  # 极速,因为有缓存

深入学习装饰器 →


2. 生成器 (Generators)

生成器使用 yield 关键字实现惰性求值,按需生成值而不是一次性生成所有值,节省内存。

核心概念:

  • yield 关键字
  • yield from 委托
  • 生成器表达式 (x for x in ...)
  • next() 和迭代器协议
  • send(), close(), throw()

常见应用:

  • 处理大文件 (逐行读取)
  • 无限序列 (斐波那契数列)
  • 数据管道 (过滤、转换)
  • 批量处理
  • 树遍历
python
def read_large_file(filename):
    """逐行读取大文件,不占用内存"""
    with open(filename) as f:
        for line in f:
            yield line.strip()

for line in read_large_file("huge.log"):
    if "ERROR" in line:
        print(line)

深入学习生成器 →


3. 上下文管理器 (Context Managers)

上下文管理器通过 with 语句确保资源的正确获取和释放,即使发生异常也能保证清理。

核心概念:

  • with 语句
  • __enter____exit__ 魔术方法
  • @contextmanager 装饰器
  • contextlib 模块工具
  • 异步上下文管理器 (async with)

常见应用:

  • 文件操作 (自动关闭)
  • 锁管理 (自动释放)
  • 数据库事务 (自动提交/回滚)
  • 临时状态 (目录切换、环境变量)
  • 性能分析和计时
python
from contextlib import contextmanager

@contextmanager
def timer(name):
    start = time.time()
    yield
    print(f"{name} took {time.time() - start:.2f}s")

with timer("Data processing"):
    process_large_dataset()
# 自动打印执行时间

深入学习上下文管理器 →


4. 异步编程 (Async Programming)

Python 的 async/await 语法支持异步编程,通过事件循环实现高并发,类似 JavaScript 的 Promise 和 async/await。

核心概念:

  • async def 定义协程
  • await 等待异步操作
  • 事件循环 (Event Loop)
  • asyncio.create_task() 创建任务
  • asyncio.gather() 并发执行
  • 异步上下文管理器和迭代器

常见应用:

  • 异步 HTTP 请求
  • 异步文件操作
  • 异步数据库查询
  • WebSocket 通信
  • 并发爬虫
python
import asyncio
import httpx

async def fetch_all(urls):
    """并发获取多个 URL"""
    async with httpx.AsyncClient() as client:
        tasks = [client.get(url) for url in urls]
        responses = await asyncio.gather(*tasks)
        return [r.json() for r in responses]

urls = ["url1", "url2", "url3"]
results = asyncio.run(fetch_all(urls))

深入学习异步编程 →


学习路径建议

┌─────────────┐
│  装饰器     │  ← 从这里开始:理解函数增强的概念
│ Decorators  │
└──────┬──────┘


┌─────────────┐
│  生成器     │  ← 学习惰性求值和内存优化
│ Generators  │
└──────┬──────┘


┌─────────────┐
│ 上下文管理器 │  ← 掌握资源管理的最佳实践
│Context Mgrs │
└──────┬──────┘


┌─────────────┐
│  异步编程   │  ← 最后学习:需要前面的知识基础
│   Async     │
└─────────────┘

推荐学习顺序:

  1. 装饰器 - 相对独立,类似前端 HOC,容易上手
  2. 生成器 - 理解迭代器协议,为异步编程打基础
  3. 上下文管理器 - 学习资源管理,异步中会用到
  4. 异步编程 - 综合运用前面的知识

快速参考

装饰器

python
@timer
@cache
def expensive_function(n):
    return n ** 2

生成器

python
# 生成器函数
def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

# 生成器表达式
squares = (x**2 for x in range(1000000))

上下文管理器

python
# 使用 with 语句
with open("file.txt") as f:
    content = f.read()

# 自定义上下文管理器
@contextmanager
def custom_context():
    setup()
    yield
    cleanup()

异步编程

python
async def main():
    results = await asyncio.gather(
        fetch_data(1),
        fetch_data(2),
        fetch_data(3)
    )
    return results

asyncio.run(main())

与前端技术对比

Python 特性前端对应相似度
装饰器HOC, Decorators (TC39)⭐⭐⭐⭐ 高
生成器Generator 函数⭐⭐⭐⭐ 高
上下文管理器try...finally, using (TC39)⭐⭐⭐ 中
async/awaitPromise, async/await⭐⭐⭐⭐⭐ 极高

实战建议

何时使用装饰器?

  • ✅ 需要为多个函数添加相同的功能(日志、缓存、权限)
  • ✅ 不想修改原函数实现
  • ✅ 需要在函数前后执行额外逻辑

何时使用生成器?

  • ✅ 处理大数据集,一次性加载到内存会溢出
  • ✅ 需要无限序列
  • ✅ 构建数据处理管道
  • ❌ 需要多次遍历同一数据(生成器只能遍历一次)

何时使用上下文管理器?

  • ✅ 需要确保资源被正确释放(文件、锁、连接)
  • ✅ 需要在代码块前后执行设置和清理
  • ✅ 希望代码更简洁、异常更安全

何时使用异步编程?

  • ✅ I/O 密集型任务(网络请求、文件操作、数据库)
  • ✅ 需要高并发
  • ✅ 实时应用(WebSocket、SSE)
  • ❌ CPU 密集型任务(用多进程更好)

下一步

选择一个章节开始学习:

准备好深入 Python 高级特性了吗?让我们开始吧!

学习文档整合站点