Use Cases

用 Claude Code 提升 Python 开发效率实战

从 FastAPI 应用到数据处理脚本、pytest 自动化测试,Claude Code 让 Python 开发一气呵成。

用 Claude Code 玩转 Python 开发

Claude Code 不仅仅擅长 TypeScript,在 Python 开发上同样强大。从 FastAPI Web 开发、数据处理脚本到测试生成,都能轻松覆盖。

构建 FastAPI 应用

> 用 FastAPI 做一个用户管理 API。
> - 用 Pydantic 做校验
> - SQLAlchemy + asyncpg 连接数据库
> - CRUD 端点
> - JWT 认证
from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel, EmailStr
from sqlalchemy.ext.asyncio import AsyncSession
from datetime import datetime

app = FastAPI(title="User Management API")

class UserCreate(BaseModel):
    email: EmailStr
    name: str
    password: str

    class Config:
        json_schema_extra = {
            "example": {
                "email": "user@example.com",
                "name": "张三",
                "password": "securepassword123",
            }
        }

class UserResponse(BaseModel):
    id: str
    email: str
    name: str
    is_active: bool
    created_at: datetime

    class Config:
        from_attributes = True

@app.post("/users", response_model=UserResponse, status_code=201)
async def create_user(
    user_data: UserCreate,
    db: AsyncSession = Depends(get_db),
):
    existing = await get_user_by_email(db, user_data.email)
    if existing:
        raise HTTPException(status_code=409, detail="Email address is already registered")

    hashed = hash_password(user_data.password)
    user = await create_user_in_db(db, user_data, hashed)
    return user

@app.get("/users/{user_id}", response_model=UserResponse)
async def get_user(
    user_id: str,
    db: AsyncSession = Depends(get_db),
):
    user = await get_user_by_id(db, user_id)
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    return user

生成数据处理脚本

使用 pandas 或 polars 的数据处理脚本也能让 Claude Code 帮你高效写出来。

> 帮我写一个脚本,读取 CSV 文件并做下面的处理:
> - 缺失值填充(数值用中位数,字符串用"未知")
> - 日期列解析
> - 销售额按月份汇总
> - 结果导出到 Excel
import polars as pl
from pathlib import Path

def process_sales_data(input_path: str, output_path: str) -> None:
    df = pl.read_csv(input_path)

    # 缺失值填充
    numeric_cols = [c for c in df.columns if df[c].dtype in [pl.Float64, pl.Int64]]
    string_cols = [c for c in df.columns if df[c].dtype == pl.Utf8]

    for col in numeric_cols:
        median_val = df[col].median()
        df = df.with_columns(pl.col(col).fill_null(median_val))

    for col in string_cols:
        df = df.with_columns(pl.col(col).fill_null("未知"))

    # 日期解析和月度汇总
    df = df.with_columns(
        pl.col("date").str.to_date("%Y-%m-%d").alias("date_parsed")
    )

    monthly = (
        df.group_by(pl.col("date_parsed").dt.truncate("1mo"))
        .agg([
            pl.col("amount").sum().alias("total_sales"),
            pl.col("amount").mean().alias("avg_sales"),
            pl.col("amount").count().alias("transaction_count"),
        ])
        .sort("date_parsed")
    )

    monthly.write_excel(output_path)
    print(f"处理完成:共输出 {len(monthly)} 个月的数据")

if __name__ == "__main__":
    process_sales_data("sales.csv", "monthly_report.xlsx")

pytest 测试生成

> 帮我为 process_sales_data 函数写 pytest 测试。
> 用 Fixture 创建临时 CSV 的模式。
import pytest
import polars as pl
from pathlib import Path
from process_sales import process_sales_data

@pytest.fixture
def sample_csv(tmp_path: Path) -> Path:
    csv_path = tmp_path / "test_sales.csv"
    csv_path.write_text(
        "date,product,amount\n"
        "2026-01-15,商品A,1000\n"
        "2026-01-20,商品B,2000\n"
        "2026-02-10,商品A,1500\n"
        "2026-02-15,,\n"
    )
    return csv_path

def test_process_creates_output(sample_csv: Path, tmp_path: Path):
    output = tmp_path / "output.xlsx"
    process_sales_data(str(sample_csv), str(output))
    assert output.exists()

def test_monthly_aggregation(sample_csv: Path, tmp_path: Path):
    output = tmp_path / "output.xlsx"
    process_sales_data(str(sample_csv), str(output))
    result = pl.read_excel(output)
    assert len(result) == 2  # 1月和2月

def test_null_handling(sample_csv: Path, tmp_path: Path):
    output = tmp_path / "output.xlsx"
    process_sales_data(str(sample_csv), str(output))
    result = pl.read_excel(output)
    # 缺失值已被填充并计入汇总
    assert result["transaction_count"].sum() == 4

更全面的测试策略请参考 测试策略完全指南

添加类型注解

也可以让 Claude Code 给已有的 Python 代码补类型注解。

> 给 src/ 下的 Python 文件补全类型注解。
> 要能通过 mypy --strict 检查。

在 CLAUDE.md 中配置 Python 规则

## Python 开发规范
- 目标 Python 3.12 及以上
- 类型注解必须标注
- 格式化使用 ruff format,linter 使用 ruff check
- 测试使用 pytest,覆盖率不低于 80%

API 开发模式请参考 API 开发加速指南,CLAUDE.md 的写法请参考 CLAUDE.md 最佳实践完全指南

总结

Claude Code 在 Python 开发中同样能发挥高生产力。FastAPI 应用、数据处理、测试生成——只要把需求说清楚,就能得到高质量的代码。

更多信息请参阅 Python 官方文档Anthropic 官方文档

#Claude Code #Python #FastAPI #数据处理 #backend

让你的 Claude Code 工作流更上一层楼

50 个经过实战检验的提示词模板,现在就能复制粘贴到 Claude Code 中使用。

免费

免费 PDF:5 分钟看懂 Claude Code 速查表

关键命令、快捷键与提示词示例,整理在一页可打印的 A4 纸上。

下载 PDF
M

本文作者

Masa

深度使用 Claude Code 的工程师。运营 claudecode-lab.com——一个涵盖 10 种语言、超过 2,000 页内容的科技媒体。