python について
Python 3.11 以降のアプリケーション向け性能最適化ガイドです。非同期 I/O、データ構造、メモリ、並行処理などのルールを影響度順に整理し、実装やレビュー、自動リファクタリングに活用できます。
主な機能
- 018 分野の性能ガイド
- 02影響度に基づく優先順位
- 03非同期 I/O の推奨事項
- 04データ構造とメモリの指針
- 05並行処理と反復処理の手法
活用シーン
- 01非同期 I/O コードの作成
- 02コレクションに使うデータ構造の選択
- 03データ集約型アプリのメモリ最適化
- 04並行処理コードの性能レビュー
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill pythonインストール後、Claude Code で/pythonを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
AGENTS.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mdconc-asyncio-for-io.mdconc-multiprocessing-cpu.mdconc-queue-communication.mdconc-taskgroup.mdconc-threadpool-blocking.mdds-bisect-sorted.mdds-defaultdict.mdds-deque-for-queue.mdds-dict-for-lookup.mdds-frozenset-for-hashable.mdds-set-for-membership.mdfunc-keyword-only.mdfunc-lru-cache.mdfunc-partial.mdfunc-reduce-calls.mdio-aiofiles.mdio-async-gather.mdio-connection-pooling.mdio-defer-await.mdio-semaphore.mdio-uvloop.mdloop-any-all.mdloop-comprehension.mdloop-dict-items.mdloop-enumerate.mdloop-hoist-invariants.md詳細
Python 3.11 のベストプラクティス
Python 3.11 以降のアプリケーション向けの、包括的なパフォーマンス最適化ガイドです。8 つのカテゴリーにわたる 42 のルールを収録しており、自動リファクタリングとコード生成をガイドできるよう、影響度順に優先順位を付けています。
適用するタイミング
以下の場合に、これらのガイドラインを参照してください。
- 新しい Python の非同期 I/O コードを記述するとき
- コレクションに使うデータ構造を選択するとき
- データ集約型アプリケーションのメモリ使用量を最適化するとき
- 並行処理または並列処理を実装するとき
- パフォーマンス上の問題がないか Python コードをレビューするとき
優先度別のルールカテゴリー
| 優先度 | カテゴリー | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | I/O と非同期パターン | CRITICAL | io- |
| 2 | データ構造の選択 | CRITICAL | ds- |
| 3 | メモリ最適化 | HIGH | mem- |
| 4 | 並行処理と並列処理 | HIGH | conc- |
| 5 | ループと反復処理 | MEDIUM | loop- |
| 6 | 文字列操作 | MEDIUM | str- |
| 7 | 関数と呼び出しのオーバーヘッド | LOW-MEDIUM | func- |
| 8 | Python の慣用表現とマイクロ最適化 | LOW | py- |
目次
-
I/O と非同期パターン — CRITICAL
- 1.1 値が必要になるまで await を遅らせる — CRITICAL(依存する操作が 2~5 倍高速)
- 1.2 非同期ファイル操作に aiofiles を使う — CRITICAL(イベントループのブロックを防止)
- 1.3 並行 I/O に asyncio.gather() を使う — CRITICAL(スループットが 2~10 倍向上)
- 1.4 データベースアクセスにコネクションプーリングを使う — CRITICAL(接続ごとに 100~200ms 節約)
- 1.5 並行操作の制限にセマフォを使う — CRITICAL(リソースの枯渇を防止)
- 1.6 イベントループの高速化に uvloop を使う — CRITICAL(非同期 I/O が 2~4 倍高速)
-
データ構造の選択 — CRITICAL
- 2.1 ソート済みリストの操作に bisect を使って O(log n) にする — CRITICAL(検索を O(n) から O(log n) に改善)
- 2.2 キーの存在確認を避けるために defaultdict を使う — CRITICAL(冗長な検索を排除)
- 2.3 キューの O(1) 操作に deque を使う — CRITICAL(popleft を O(n) から O(1) に改善)
- 2.4 O(1) のキーと値の検索に dict を使う — CRITICAL(検索を O(n) から O(1) に改善)
- 2.5 ハッシュ可能な集合キーに frozenset を使う — CRITICAL(集合の集合パターンを利用可能)
- 2.6 O(1) のメンバーシップ判定に set を使う — CRITICAL(検索を O(n) から O(1) に改善)
-
メモリ最適化 — HIGH
- 3.1 繰り返し使う文字列をインターンしてメモリを節約する — HIGH(文字列の重複保存を削減)
- 3.2 メモリ効率の高いクラスに slots を使う — HIGH(インスタンスごとにメモリを 20~50%削減)
- 3.3 同種の数値データに array.array を使う — HIGH(数値のメモリ使用量を 4~8 倍削減)
- 3.4 大きなシーケンスにジェネレーターを使う — HIGH(メモリ使用量を 100~1000 倍削減)
- 3.5 メモリリークを防ぐキャッシュに weakref を使う — HIGH(キャッシュの無制限な増大を防止)
-
並行処理と並列処理 — HIGH
- 4.1 I/O バウンドの並行処理には asyncio を使用する — HIGH(I/O のスループットが 300% 向上)
- 4.2 CPU バウンドの並列処理には multiprocessing を使用する — HIGH(マルチコアシステムで 4~8 倍高速化)
- 4.3 スレッドセーフな通信には Queue を使用する — HIGH(競合状態を防止)
- 4.4 構造化並行処理には TaskGroup を使用する — HIGH(失敗時のリソースリークを防止)
- 4.5 非同期処理でのブロッキング呼び出しには ThreadPoolExecutor を使用する — HIGH(イベントループのブロックを防止)
-
ループと反復処理 — MEDIUM
- 5.1 ループ不変の計算をループの外に移動する — MEDIUM(N 回の重複処理を回避)
- 5.2 ブール値の集約には any() と all() を使用する — MEDIUM(最良の場合、O(n) から O(1) に改善)
- 5.3 キーと値の反復処理には dict.items() を使用する — MEDIUM(2 回の検索ではなく 1 回の検索)
- 5.4 インデックスと値の反復処理には enumerate() を使用する — MEDIUM(コードがすっきりし、インデックスエラーを回避)
- 5.5 効率的な反復処理パターンには itertools を使用する — MEDIUM(反復処理パターンが 2~3 倍高速化)
- 5.6 明示的なループよりリスト内包表記を使用する — MEDIUM(反復処理が 2~3 倍高速化)
-
文字列操作 — MEDIUM
- 6.1 簡単な文字列フォーマットには f-string を使用する — MEDIUM(.format() より 20~30% 高速)
- 6.2 複数の文字列の連結には join() を使用する — MEDIUM(5 個以上の文字列では 4 倍高速)
- 6.3 複数の接頭辞にはタプルを使った str.startswith() を使用する — MEDIUM(複数回の比較ではなく 1 回の呼び出し)
- 6.4 文字単位の置換には str.translate() を使用する — MEDIUM(replace() の連結より 10 倍高速)
-
関数と呼び出しのオーバーヘッド — LOW-MEDIUM
- 7.1 頻繁に反復するループ内の関数呼び出しを減らす — LOW-MEDIUM(100 万回の反復ごとに 100 ms を削減)
- 7.2 事前に引数を設定するには functools.partial を使用する — LOW-MEDIUM(イントロスペクションによりデバッグが 50% 高速化)
- 7.3 API を明確にするにはキーワード専用引数を使用する — LOW-MEDIUM(位置引数の誤りを防止)
- 7.4 コストの高い関数のメモ化には lru_cache を使用する — LOW-MEDIUM(計算の繰り返しを回避)
-
Python の慣用表現とマイクロ最適化 — LOW
- 8.1 ゼロコストの例外処理を活用する — LOW(通常の処理経路ではオーバーヘッドなし(Python 3.11 以降))
- 8.2 グローバル検索よりローカル変数を優先する — LOW(名前解決が高速化)
- 8.3 データを保持するクラスには dataclass を使用する — LOW(定型コードを 80% 削減)
- 8.4 起動を高速化するには遅延インポートを使用する — LOW(起動が 10~15% 高速化)
- 8.5 構造的パターンマッチングには match 文を使用する — LOW(分岐の複雑さを軽減)
- 8.6 式内での代入にはセイウチ演算子を使用する — LOW(重複する計算を排除)
References
コメント
Markdown 対応