"Python"
- pytest fixture(測試夾具)
讀到測試函式的參數沒有任何呼叫端傳入、或要讓多個測試共用準備與清理步驟時:pytest 用參數名稱找出 fixture、在測試前後執行準備與清理
- 8.1 Python 的幾種工作與資料進入程式的單位:Web 後端、資料工程與分析、機器學習、自動化與系統工具
資料以一筆還是一整批進入程式,各組工作的工具鏈與失敗形態怎麼跟著這個單位分開
- 8.1 並行處理實戰
將 concurrent.futures 應用於真實的 I/O 密集任務
- 案例:Cython 加速 Markdown 解析
用 Cython 加速 Markdown 連結解析器,比較純 Python 與 Cython 的效能差異
- 案例:PyO3 文字解析
用 PyO3 和 Rust 實現高效能的 Markdown 連結解析器
- 案例:打包共用庫
將 .claude/lib 打包成可重用的 Python 套件
- 案例:快取生命週期管理
用 Context Manager 控制快取的生命週期,解決全域狀態問題
- 案例:並行檔案檢查
使用 ThreadPoolExecutor 加速 Markdown 連結檢查
- 案例:非同步 subprocess
用 asyncio.create_subprocess_exec 實現非阻塞的外部命令執行
- 案例:宣告式驗證
用 Descriptor Protocol 將驗證邏輯從方法變成屬性定義
- 案例:效能分析實戰
用 cProfile 和 line_profiler 分析 Markdown 連結檢查器的效能瓶頸
- 從 threading 到 asyncio:轉換指南
幫助你從傳統執行緒模型平滑過渡到異步程式設計
- 1.1 Python 哲學與設計理念
理解 Python 的核心設計原則
- 2.1 Descriptor Protocol 完整指南
深入理解 Python 的 Descriptor Protocol,@property 的本質
- 2.1 Type Hints 基礎
為函式添加型別註解,提升程式碼可讀性
- 3.1 pathlib - 路徑操作
物件導向的路徑處理
- 3.1 PyObject 與物件模型
深入理解 Python 的物件模型
- 3.5.1 泛型進階
TypeVar 進階用法、Generic 類別、Protocol 與結構化子型別
- 4.1 ctypes 與 cffi:動態綁定
使用 ctypes 和 cffi 呼叫 C 函式庫
- 4.1 類別設計原則
設計清晰的類別介面
- 5.1 異常處理策略
何時捕獲、何時拋出
- 5.1 選擇 Rust 的理由:記憶體安全與現代工具鏈
比較 Rust 與 C/C++ 作為 Python 擴展語言
- 6.1 pyproject.toml 完整指南
理解現代 Python 套件的設定標準
- 6.1 如何新增一個 Hook
完整的 Hook 開發流程
- 認知負擔:程式碼設計的核心目的
所有設計原則的統一視角:降低閱讀者的認知負擔
- 只讀檢查腳本 host-check.py 的原始碼與逐段說明:選項的切分與各工具的白名單規則、清單的載入與驗證、指令的執行、各項檢查、路徑與時間的量測、結果檔與命令列,以及這一版的已知限制
要讀主機維護清單的只讀檢查腳本實際怎麼切分各工具的選項、怎麼驗證清單、怎麼判定 PASS、WARN 與 MANUAL、怎麼寫結果檔,或要照它的做法寫自己的檢查腳本時,查完整的 Python 原始碼與每一段這樣寫的理由
- monkeypatch(測試期間的替換)
用 monkeypatch 或 unittest.mock.patch 替換了函式卻沒有生效、或把模組拆成套件之後原本的替換失效時:替換要對準程式執行時查找的那個名字
- 8.2 運算發生的位置:資料庫端與記憶體端的工具、分工條件與 DuckDB
運算留在資料庫端或搬進記憶體端這條分界,怎麼決定工具的形狀、容量上限與失敗形態
- Runtime 版本升級
PHP / Node.js / Python 大版本升級的相容性評估、本地驗證、分批部署策略與常見陷阱
- 1.2 從單一 script 到多檔案專案
理解 Python 程式如何從單一 .py 檔案長成 module、package 與可測試專案
- 8.2 效能調優實戰
測量、分析、優化的完整流程
- 案例:Rust 正則表達式
用 Rust regex crate 加速 Hook 驗證器的模式匹配
- 案例:自動註冊機制
用 Metaclass 實現檢查器的自動註冊,消除手動維護註冊表的負擔
- 案例:並行 Hook 驗證
使用 ThreadPoolExecutor 並行驗證 Hook,並實現進度報告
- 案例:並行 I/O 操作
用 asyncio.gather 和 TaskGroup 實現高效的並行 I/O 操作
- 案例:使用 ctypes 呼叫系統 API
透過 ctypes 直接呼叫 C 函式庫的系統函式,實現 Python 標準庫未提供的功能
- 案例:使用 Poetry 完整工作流
從專案建立到發布的 Poetry 完整工作流程
- 案例:記憶體優化
用 __slots__ 和 weakref 優化快取系統的記憶體使用
- 案例:插件架構設計
用 Protocol 和註冊機制實現可擴展的插件系統
- 1.1 基礎概念與事件迴圈
理解 asyncio 的核心概念:事件迴圈、協程與並發模型
- 2.2 Metaclass 設計與應用
理解 Python 的類別建立機制與 Metaclass
- 2.2 Optional、Union、泛型
處理可能為 None 的值和複合型別
- 3.2 json - 序列化
資料的讀寫與轉換
- 3.2 記憶體管理與垃圾回收
理解 Python 的記憶體管理機制
- 3.5.2 異常設計架構
異常層級設計、異常鏈、ExceptionGroup、異常 vs 返回值
- 4.2 Cython:Python 語法的 C 速度
使用 Cython 加速 Python 程式碼
- 4.2 抽象基類 ABC
定義介面契約
- 5.2 PyO3 基礎
使用 PyO3 建立 Rust 與 Python 的綁定
- 5.2 返回值設計
(bool, str) 模式的應用
- 6.2 如何擴展共用模組
為 Hook 系統添加新功能
- 6.2 建構系統比較
比較 setuptools、Poetry、Hatch 等建構系統
- 命名的藝術:讓程式碼說故事
透過命名降低認知負擔,讓程式碼像故事一樣易讀
- 主機維護清單寫成 TOML:JSON、YAML、TOML 的取捨、TOML 1.0 與 1.1 的版本差異、清單的欄位設計與只讀檢查腳本
把一台主機的維護、暫停與恢復上線項目寫成一份資料檔:這份清單對格式的需求、JSON、YAML、TOML 逐項比對(YAML 把 no 讀成 false、010 讀成 8 的實測,以及 TOML 照樣把 1.10 讀成 1.1)、TOML 的表格與表格陣列寫法、1.0 與 1.1 的解析器差異(Python tomllib 的 TOMLDecodeError)、欄位怎麼依檢查腳本與人的需要設計,以及只讀檢查腳本的白名單條件、輸出與 exit code
- 8.3 ORM 與 DataFrame 的分辨:回傳值的形狀、連線物件與查詢送出的時機
ORM 產生查詢、DataFrame 執行運算,以及外觀相似的方法串接底下差了什麼
- Python 平台適配
GIL 與 threading、atexit 可靠性、subprocess 監控 — Python SDK 的平台特殊考量
- 案例:pybind11 綁定 C++ 類別
用 pybind11 將 C++ 類別綁定到 Python,展示建構子、方法、屬性、運算子重載與記憶體管理
- 案例:正則表達式預編譯
用 re.compile 減少重複編譯開銷
- 案例:同步/非同步橋接
用 run_in_executor 和 asyncio.run 在同步與非同步程式碼之間建立橋樑
- 案例:使用 Hatch 完整工作流
從專案建立到發布的 Hatch 實戰指南
- 案例:異常設計架構
設計清晰的異常階層,並用 ExceptionGroup 處理多重錯誤
- 案例:類似 Django Field 的設計
結合 Descriptor 和 dataclass 設計類似 Django Model Field 的宣告式 API
- 1.2 協程與 Task 管理
深入理解協程、Task 與 Future,掌握 async/await 的進階用法
- 1.3 模組與套件組織
理解 Python 的模組系統和套件結構
- 2.3 Dataclass 資料結構
快速定義資料類別
- 2.3 類別裝飾器與動態類別
使用類別裝飾器和 type() 動態建立類別
- 3.3 Bytecode 與虛擬機
理解 Python 的執行過程
- 3.3 subprocess - 執行外部命令
呼叫系統命令和外部程式
- 3.5.3 進階上下文管理
上下文管理器協議、contextlib 工具、嵌套與組合、async with
- 4.3 pybind11:現代 C++ 綁定
使用 pybind11 建立 Python 與 C++ 的綁定
- 4.3 工廠模式
動態建立物件
- 5.3 Maturin 開發流程
使用 Maturin 建構和發布 Rust Python 套件
- 5.3 unittest 基礎
撰寫第一個單元測試
- 6.3 如何新增語言解析器
繼承 ABC 實作新解析器
- 6.3 發布到 PyPI
學習如何建構 wheel 並發布到 PyPI
- 開放封閉原則與認知負擔
從認知負擔的視角重新理解 SOLID 原則
- 8.4 SQL 子句與 pandas 方法的對應:篩選、連接、分組彙總、視窗函數,以及空值、索引與順序的語意差異
SQL 與 DataFrame 共用的關聯代數、同一份資料上兩邊寫法的實測比對,以及照著逐句翻譯會靜默失準的位置
- 成本思維:軟體開發的隱性代價
每個技術決策都有成本,學會識別和評估隱性代價
- 案例:LRU 快取
用 functools.lru_cache 快取重複計算
- 案例:泛型驗證器
用 Generic 和 TypeVar 建立型別安全的通用驗證器
- 1.3 設計模式與最佳實踐
學習常見的異步設計模式,避免常見陷阱
- 1.4 導入機制與路徑管理
解決模組找不到的問題
- 2.4 Enum 列舉型別
定義有限選項集合
- 2.4 反射與 inspect 模組
使用反射和 inspect 模組檢視和操作 Python 物件
- 3.4 GIL 與執行緒模型
深入理解 GIL 的設計與實現
- 3.4 re - 正規表達式
文字模式匹配與擷取
- 3.5.4 插件系統設計
插件架構模式、動態載入模組、entry_points、實際範例
- 4.4 單例與快取模式
控制物件生命週期
- 4.4 選擇指南與效能比較
比較不同 C 擴展工具的適用場景
- 5.4 Mock 與測試隔離
隔離外部依賴
- 5.4 實戰案例分析
分析知名 Python 專案如何使用 Rust
- 6.4 套件維護最佳實踐
長期維護 Python 套件的最佳實踐
- 8.5 pandas 的記憶體邊界:資料與運算過程的佔用估算,推回資料庫、換引擎與分散式的代價
數值欄與字串欄的佔用怎麼得出、合併這類操作的中間結果佔多少,以及記憶體不足與跑得慢這兩種失敗怎麼分辨
- 2.5 Callable 型別與高階函式
用 Callable 型別描述可呼叫物件與高階函式,讓 callback、decorator 與依賴注入的型別契約清楚起來
- 5.5 頂層例外處理機制
run_hook_safely 與統一錯誤基礎設施
- 6.5 封裝預編譯二進位
Python 套件如何封裝其他語言編譯的二進位檔案
- 案例:資料結構選擇
選擇正確的資料結構:list vs set 的查詢效能差異
- 1.4 實戰:與同步程式碼整合
在現有專案中引入 asyncio,處理同步與異步的混合場景
- 3.5 logging - 日誌系統
結構化日誌輸出與除錯
- 3.5.5 設計模式整合案例
結合泛型、異常、上下文、插件建立完整系統
- 4.5 Free-Threading - Python 的真正多執行緒時代
Python 3.13+ 無 GIL 版本的完整指南
- 3.5.6 軟體設計的取捨藝術
從業界經驗學習取捨決策框架:DRY vs 重複、效能 vs 可讀性、Build vs Buy、技術債務管理
- 5.6 Hook 系統可觀測性設計
日誌架構、錯誤可見性、健康監控:讓 44 個 Hook 的運行狀態透明可追蹤
- 3.6 argparse - CLI 介面
命令列參數解析
- 3.7 並行處理 - threading、multiprocessing、concurrent.futures
Python 並行處理的三種方式與選擇指南
- 3.8 效能迷思與優化策略
Python 效能的真相、常見誤解與優化方法
- 重構的動機與策略
從 Hook 系統重構經驗出發,學習何時重構、何時不該重構,以及如何將大規模重構拆分成可管理的階段
- 程式碼壞味道偵測
從三級分類系統到偵測工具鏈,建立系統化的程式碼品質防線
- DRY 原則與共用程式庫
學習識別重複程式碼並建立共用模組,含模組演進與漸進遷移策略
- 配置分離與常數管理
學習消除三種硬編碼問題:魔法數字、配置混合、散落訊息
- 大規模統一化重構
從 44 種不同實作到統一基礎設施:日誌、訊息、風格的三階段漸進式重構
- 重構陷阱與防護
三個真實重構事故的共通模式:部分更新問題與系統性防護方法
- 完整案例回顧
從超過 30 個 Hook 各自為政到系統化品質工程,三個階段的完整重構復盤
- 作用域迴歸案例研究
從 IMP-003 事件學習 Python 變數作用域的陷阱
- 拆分 Python 模組:pytest 的特徵測試、同名套件與重新匯出、自動登記的分派表、避免循環匯入
職責邊界已經從修改紀錄歸類出來之後,用 Python 拆分一個模組而不改變對外行為:用 pytest 寫特徵測試與 monkeypatch 的替換目標、改成同名套件並重新匯出、把巨型分支改成自動登記的分派表,以及拆出模組之間循環匯入在 Python 的症狀與解法
- Gevent Monkey Patching(gevent 的猴子補丁)
Locust 的吞吐量從加壓一開始就不隨使用者數增加而 worker 的 CPU 很低、一個 worker 程序的 CPU 到頂,或要判斷某個 Python 函式庫是否會卡住 Locust 的 worker 時讀
- 10 個 Ticket、57 個綠燈、0 條追溯:從需求文件到測試的銜接檢討
單元測試全綠、卻對應不出「這些測試覆蓋了哪些 UseCase 場景」。需求到測試缺反向追溯時的流程缺口盤點與對應修法(追溯矩陣、存根策略、拆分規則)。