一键导入
python-patterns
Python 開發原則與決策。框架選擇、非同步模式、型別提示、專案結構。教你思考而非複製。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Python 開發原則與決策。框架選擇、非同步模式、型別提示、專案結構。教你思考而非複製。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
使用 Claude API / Anthropic SDK 建構、除錯和最佳化應用程式。使用此技能建構的應用程式應包含提示快取 (prompt caching)。也處理在 Claude 模型版本之間遷移現有 Claude API 程式碼(4.5 → 4.6,4.6 → 4.7,替換已退役模型)。觸發時機:程式碼匯入 anthropic/@anthropic-ai/sdk;使用者要求使用 Claude API、Anthropic SDKs 或 Managed Agents (/v1/agents, /v1/sessions, /v1/environments);使用者在檔案中新增/修改/調整 Claude 功能(快取、思考、壓縮、工具使用、批次、檔案、引用、記憶)或模型(Opus/Sonnet/Haiku);關於 Anthropic SDK 專案中提示快取/快取命中率的問題。不觸發:檔案匯入 `openai`/其他提供者 SDK,檔案名稱類似 `*-openai.py`/`*-generic.py`,與提供者無關的程式碼,一般程式設計/機器學習。
當編寫呼叫 Gemini API 的程式碼時請使用此技能,用於文字生成、多輪對話、多模態理解、影像生成、串流回應、背景研究任務、函式呼叫、結構化輸出,或從舊的 generateContent API 遷移。此技能涵蓋 Interactions API,這是在 Python 與 TypeScript 中使用 Gemini 模型與代理的建議方式。
Tailwind CSS v4 原則。CSS 優先配置、容器查詢、現代模式、設計 token 架構。
處理使用 Gemini Live API 的即時、雙向串流應用程式時使用此技能。涵蓋基於 WebSocket 的音訊/視訊/文字串流、語音活動偵測 (VAD)、原生音訊功能、函式呼叫、會話管理、用戶端身分驗證的臨時權杖,以及所有 Live API 設定選項。涵蓋的 SDK - google-genai (Python)、@google/genai (JavaScript/TypeScript)。
自動代理選擇與智慧任務路由。分析使用者請求並自動選擇最佳專家代理,無需使用者明確提及。
精通 Rust 1.75+ 的現代 async 模式、進階型別系統功能與生產就緒的系統程式設計。精通最新 Rust 生態系包括 Tokio、axum 和尖端 crates。Rust 開發、效能最佳化或系統程式設計時主動使用。
| name | python-patterns |
| description | Python 開發原則與決策。框架選擇、非同步模式、型別提示、專案結構。教你思考而非複製。 |
| allowed-tools | Read, Write, Edit, Glob, Grep |
2025 年 Python 開發的原則與決策。 學習思考方式,而非記憶模式。
此技能教導決策原則,而非固定的程式碼複製。
你要建構什麼?
│
├── API 優先 / 微服務
│ └── FastAPI(非同步、現代、快速)
│
├── 全端 Web / CMS / 管理後台
│ └── Django(電池已含)
│
├── 簡單 / 腳本 / 學習
│ └── Flask(最小、彈性)
│
├── AI/ML API 服務
│ └── FastAPI(Pydantic、async、uvicorn)
│
└── 背景工作
└── Celery + 任何框架
| 因素 | FastAPI | Django | Flask |
|---|---|---|---|
| 最適合 | API、微服務 | 全端、CMS | 簡單、學習 |
| 非同步 | 原生 | Django 5.0+ | 透過擴充 |
| 管理後台 | 手動 | 內建 | 透過擴充 |
| ORM | 自選 | Django ORM | 自選 |
| 學習曲線 | 低 | 中 | 低 |
async def 更好的情況:
├── I/O 密集操作(資料庫、HTTP、檔案)
├── 大量併發連線
├── 即時功能
├── 微服務通訊
└── FastAPI/Starlette/Django ASGI
def(sync)更好的情況:
├── CPU 密集操作
├── 簡單腳本
├── 遺留程式碼庫
├── 團隊不熟悉 async
└── 阻塞函式庫(沒有 async 版本)
I/O 密集 → async(等待外部)
CPU 密集 → sync + multiprocessing(計算)
不要:
├── 粗心混合 sync 和 async
├── 在 async 程式碼中使用 sync 函式庫
└── 強制 async 用於 CPU 工作
| 需求 | Async 函式庫 |
|---|---|
| HTTP 客戶端 | httpx |
| PostgreSQL | asyncpg |
| Redis | aioredis / redis-py async |
| 檔案 I/O | aiofiles |
| 資料庫 ORM | SQLAlchemy 2.0 async、Tortoise |
始終加型別:
├── 函式參數
├── 回傳型別
├── 類別屬性
├── 公開 API
可以跳過:
├── 區域變數(讓推斷運作)
├── 一次性腳本
├── 測試(通常)
# 理解這些模式:
# Optional → 可能是 None
from typing import Optional
def find_user(id: int) -> Optional[User]: ...
# Union → 多個型別之一
def process(data: str | dict) -> None: ...
# 泛型集合
def get_items() -> list[Item]: ...
def get_mapping() -> dict[str, int]: ...
# Callable
from typing import Callable
def apply(fn: Callable[[int], str]) -> str: ...
何時使用 Pydantic:
├── API 請求/回應模型
├── 設定/配置
├── 資料驗證
├── 序列化
好處:
├── 執行期驗證
├── 自動生成 JSON schema
├── 與 FastAPI 原生整合
└── 清晰的錯誤訊息
小專案 / 腳本:
├── main.py
├── utils.py
└── requirements.txt
中型 API:
├── app/
│ ├── __init__.py
│ ├── main.py
│ ├── models/
│ ├── routes/
│ ├── services/
│ └── schemas/
├── tests/
└── pyproject.toml
大型應用:
├── src/
│ └── myapp/
│ ├── core/
│ ├── api/
│ ├── services/
│ ├── models/
│ └── ...
├── tests/
└── pyproject.toml
依功能或依層次組織:
依層次:
├── routes/(API 端點)
├── services/(業務邏輯)
├── models/(資料庫模型)
├── schemas/(Pydantic 模型)
└── dependencies/(共用相依)
依功能:
├── users/
│ ├── routes.py
│ ├── service.py
│ └── schemas.py
└── products/
└── ...
Django 支援 async:
├── Async views
├── Async middleware
├── Async ORM(有限)
└── ASGI 部署
Django 中何時使用 async:
├── 外部 API 呼叫
├── WebSocket(Channels)
├── 高併發 view
└── 觸發背景任務
模型設計:
├── 胖模型、瘦視圖
├── 使用 managers 處理常用查詢
├── 用抽象基礎類別共享欄位
Views:
├── 複雜 CRUD 用 Class-based view
├── 簡單端點用 Function-based view
├── 配合 DRF 使用 viewsets
查詢:
├── select_related() 用於 FK
├── prefetch_related() 用於 M2M
├── 避免 N+1 查詢
└── 使用 .only() 選取特定欄位
使用 async def 當:
├── 使用 async 資料庫驅動
├── 進行 async HTTP 呼叫
├── I/O 密集操作
└── 想要處理併發
使用 def 當:
├── 阻塞操作
├── Sync 資料庫驅動
├── CPU 密集工作
└── FastAPI 自動在 threadpool 中執行
使用依賴用於:
├── 資料庫 session
├── 當前使用者 / 驗證
├── 設定
├── 共享資源
好處:
├── 可測試性(模擬依賴)
├── 乾淨分離
├── 自動清理(yield)
# FastAPI 與 Pydantic 緊密整合:
# 請求驗證
@app.post("/users")
async def create(user: UserCreate) -> UserResponse:
# user 已經完成驗證
...
# 回應序列化
# 回傳型別即為回應 schema
| 方案 | 最適合 |
|---|---|
| BackgroundTasks | 簡單、程序內任務 |
| Celery | 分散式、複雜工作流 |
| ARQ | Async、基於 Redis |
| RQ | 簡單 Redis 佇列 |
| Dramatiq | Actor 基礎、比 Celery 簡單 |
FastAPI BackgroundTasks:
├── 快速操作
├── 不需要持久化
├── Fire-and-forget
└── 同一個 process
Celery/ARQ:
├── 長時間運作的任務
├── 需要重試邏輯
├── 分散式 worker
├── 持久化佇列
└── 複雜工作流
在 FastAPI:
├── 建立自訂例外類別
├── 註冊例外處理器
├── 回傳一致的錯誤格式
└── 記錄日誌但不洩漏內部細節
模式:
├── 在 service 層丟出 domain 例外
├── 在 handler 層攔截並轉換
└── 客戶端拿到乾淨的錯誤回應
應包含:
├── 錯誤代碼(程式可解析)
├── 訊息(人類可讀)
├── 細節(適用時逐欄位)
└── 不要 stack traces(資安考量)
| 類型 | 用途 | 工具 |
|---|---|---|
| 單元 | 業務邏輯 | pytest |
| 整合 | API 端點 | pytest + httpx/TestClient |
| E2E | 完整工作流 | pytest + DB |
# 使用 pytest-asyncio 撰寫 async 測試
import pytest
from httpx import AsyncClient
@pytest.mark.asyncio
async def test_endpoint():
async with AsyncClient(app=app, base_url="http://test") as client:
response = await client.get("/users")
assert response.status_code == 200
常見 fixtures:
├── db_session → 資料庫連線
├── client → 測試 client
├── authenticated_user → 帶 token 的使用者
└── sample_data → 測試資料準備
實作前:
記住:Python 模式是關於你特定情境的決策。不要複製程式碼 — 思考什麼最適合你的應用。