بنقرة واحدة
python-patterns
Python 開發原則與決策。框架選擇、非同步模式、型別提示、專案結構。教你思考而非複製。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Python 開發原則與決策。框架選擇、非同步模式、型別提示、專案結構。教你思考而非複製。
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
使用 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 開發、效能最佳化或系統程式設計時主動使用。
استنادا إلى تصنيف SOC المهني
| 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 模式是關於你特定情境的決策。不要複製程式碼 — 思考什麼最適合你的應用。