Python チートシート — クイックリファレンス
モダン Python 3(3.11+)の構文、組み込み型、頻繁に使う標準ライブラリをまとめたクイックリファレンス。日常の約 80% の用途をカバーします。
Python Python 3.11(LTS 相当)
CPython · マルチパラダイム(OOP・関数型・手続き型) · 動的・強い型付け・ダックタイピング
おすすめの学習パス
まずは python3 の実行と REPL に慣れましょう → 続いて変数、組み込み型、制御フローをマスター → 関数、クラス、例外を深く学習 → 標準ライブラリでファイル・ネットワーク I/O → 参照と可変性(シャロー/ディープコピー)を理解 → 必要に応じて asyncio、プロセス、正規表現を → 最後に venv/pip/pyproject によるプロジェクト運用を学びます。落とし穴を避けたいときは FAQ 章を振り返ると効果的です。
1.Hello World とビルド環境
Python の実行、対話型 REPL、仮想環境、パッケージ管理について説明します。
最小プログラム
print でコンソールに出力します。Python はインデントでブロックを構成し、波括弧やセミコロンは使いません。
実行方法
python3 でスクリプト実行、-c で文字列実行、-m でモジュール実行。対話型 REPL ではすぐに評価されます。
仮想環境
venv はプロジェクト依存を隔離します。activate 後の pip は現在の環境だけに作用します。プロジェクトごとに必ず仮想環境を使いましょう。
pip パッケージ管理
pip で依存をインストール/アンインストール/凍結します。バージョンは ==、範囲は >=,<y で指定します。
pyproject.toml
現代のプロジェクト設定ファイル: 依存関係、ビルドバックエンド、ツール設定を pyproject.toml に集約します。
Shebang スクリプト
#!/usr/bin/env python3 でスクリプトを実行可能にします。POSIX では chmod +x の上 ./script.py で直接実行できます。
REPL での対話
python3 で REPL に入り対話的にデバッグします。_ が直前の結果を保持し、exit() で抜けます。
__main__ とモジュール
if __name__ == '__main__' でスクリプト直接実行とモジュールのインポートを区別します。スクリプト実行/モジュール利用の慣用的書き方です。
2.変数と型注釈
動的型付け、型注釈、多重代入、スコープ、そしてお walrus 演算子(:=)を取り上げます。
代入と型推論
変数の宣言は不要で、代入で生成されます。型は動的に推論され、いつでも別の型に変更できます。
型注釈
PEP 484 スタイルの型注釈で、コロンに続けて型を書きます。注釈は実行時には影響せず、ヒントと静的検査に使われます。
多重代入
a, b = b, a で 1 行の値交換。拡張アンパックは *rest を使います。個数は一致している必要があります。
定数の慣習
Python には定数キーワードがありません。モジュールレベルの定数は ALL_CAPS で命名するのが慣習です。
スコープ LEGB
名前探索の順序は Local → Enclosing → Global → Built-in。関数内での代入には global か nonlocal の宣言が必要です。
ウォルラス演算子
:= は式の中で代入する代入式(Python 3.8+)。同じ計算の繰り返しを避けられます。
None と bool
None は値なしを表します。真偽は if x で判定し、if x == True は避けましょう。空のコンテナは偽と評価されます。
del とガベージコレクション
del は変数名やコンテナ要素を削除します。名前は未定義になり、オブジェクトの参照カウントが 1 減ります。
3.データ型
組み込み型: 数値、真偽値、シーケンス、マッピング、集合、そして応用的な型注釈。
数値型
int は任意精度、float は浮動小数、complex は複素数。bool は int の派生で、除算には 2 種類のセマンティクスがあります。
bool と None
True/False は頭文字が大文字で、None はシングルトンです。and/or は短絡評価で、決定した側のオペランドを返します。
シーケンス型
str/list/tuple はすべてシーケンスで、インデックス・スライス・反復が使えます。str と tuple は不変です。
マッピング dict
dict はキーと値の組を持ち、挿入順を保持します。キーはハッシュ可能でなければならず、.get で安全に取り出せます。
集合型
set は順序なしの重複なし集合、frozenset はその不変版です。和集合・積集合・差集合の演算が使えます。
バイト型
bytes は不変、bytearray は可変です。テキストとバイト列は encode/decode で相互変換します。
型注釈の応用
typing モジュール: Optional、Union、TypeVar、ジェネリックなコンテナ。Python 3.10+ では | 構文も使えます。
ダックタイピング
「アヒルのように鳴くならアヒル」: 型ではなく振る舞いを重視します。typing.Protocol で構造的サブタイピングを定義できます。
4.参照と可変性
Python のオブジェクト参照セマンティクス: 可変/不変、シャローコピーとディープコピー、共有参照の落とし穴。
参照のセマンティクス
変数はオブジェクトに束縛され、コピーのための箱ではありません。複数の名前が同じオブジェクトを指せます。代入は束縛を作り直す操作です。
可変と不変
list/dict/set は可変で、その場で変更できます。int/str/tuple/frozenset は不変です。
シャローコピー
copy.copy はシャローコピーで、外側のコンテナは新しくなりますが、内側の要素は共有されたままです。リストのスライスもシャローコピーです。
ディープコピー
copy.deepcopy は全層を再帰的に複製します。ネストした可変構造の変更はコピー側に漏れません。コストに注意してください。
共有参照の落とし穴
同じ可変オブジェクトを共有していると、どこで変更してもすべてに見えます。引数渡しも参照渡しのセマンティクスです。
is と == の違い
== は値を比較し、is は同一性(同じオブジェクトか)を比較します。None との比較には is None を使います。
デフォルト引数の落とし穴
可変なデフォルト引数は関数定義時に 1 度だけ作られ、呼び出し間で共有されます。None をセンチネルにして関数内で生成しましょう。
インターン化とキャッシュ
小さな整数と短い文字列はインターン化(interning)でメモリが節約されます。is で値を比較するのはやめましょう。
5.制御フロー
条件分岐、ループ、パターンマッチング、内包表記。
if / elif / else
インデントでブロックを分けます。elif で複数の条件を扱い、任意の真理値式を条件にできます。
パターンマッチング
match-case は構造的パターンマッチング(Python 3.10+)。形で照合し分解できます。
for ループ
for は反復可能オブジェクトを走査します。enumerate で添字、zip で並行、dict.items() でキーと値を取得できます。
while ループ
while は条件が真の間ループします。break で早期終了し、無限ループに注意します。
break と continue
break はループ全体を抜け、continue は現在の反復をスキップします。else 節は break しなかった場合に実行されます。
内包表記
リスト/辞書/集合内包表記は 1 行でコレクションを生成し、条件でフィルタ、式で変換します。
真偽値判定
if x で真偽を判定します。0、空文字、空リスト、None は偽。True/False との明示比較は避けましょう。
反復のイディオム
itertools は効率的な反復の合成を提供します。groupby でグループ化、chain で連結、product で直積。
6.関数
関数定義、引数の渡し方、デコレータ、ジェネレータ、クロージャ。
関数定義
def で関数を定義し、本体はインデントします。return で値を返し、return がない関数は None を返します。
引数の種類
位置引数、キーワード引数、デフォルト値。呼び出し時は位置とキーワードを混在させられます。
*args と **kwargs
*args は余った位置引数をタプルに、**kwargs は余ったキーワード引数を辞書に集めます。
無名関数
lambda は 1 行式の無名関数で、sort のキーや map/filter など高階関数に渡す用途で使われます。
クロージャ
内部関数が外側の変数を捕捉し、返された関数がそのスコープを覚えます。ファクトリ関数で定番のパターンです。
デコレータ
@decorator は関数をラップして振る舞いを拡張します。コードを変えずに計測やロギングを追加できます。
ジェネレータ
yield は値を遅延生成します。ジェネレータは 1 つずつ値を流すので、大規模な系列を省メモリで扱えます。
関数型ツール
map/filter/reduce/sorted が関数スタイルの要で、functools は partial などのヘルパーを提供します。
再帰
関数が自分自身を呼び出します。必ず基底ケースを置きましょう。再帰深度の上限は約 1000(sys.setrecursionlimit で変更可)です。
7.文字列
不変文字列、f-string フォーマット、よく使うメソッド、エンコーディング。
文字列の基礎
シングルクォート/ダブルクォート/トリプルクォートで作成し、エスケープシーケンスが効きます。str は不変で、操作は新しい文字列を返します。
よく使うメソッド
upper/lower は大文字小文字、strip は空白除去、split/join は分割と連結、startswith は接頭辞判定。
f-string フォーマット
f"{var}" で式を埋め込みます。書式で配置・精度・桁区切りを制御でき、3.12+ では引用符の再利用も可能です。
format と % フォーマット
str.format は位置/名前プレースホルダ、% 演算子は古いスタイル。新しいコードでは f-string を推奨します。
分割と連結
split はセパレータで分解、rsplit は右から、partition は 3 要素に分割、join は高速に連結します。
トリムとパディング
strip/lstrip/rstrip で空白除去、zfill でゼロ詰め、center で中央寄せ、removeprefix/removesuffix は 3.9+ で使えます。
Unicode とエンコーディング
Python の str は Unicode コードポイントの列です。encode でバイト列、decode で文字列に戻し、len は文字数を数えます。
検索と置換
find/index で検索、replace で置換、translate でテーブル置換、count で出現回数を数えます。
テキスト折り返し
textwrap はテキストの折り返し: wrap で幅指定、dedent で共通インデント除去、fill で段落化。
8.コレクションとコンテナ
list/dict/set/tuple の操作、collections モジュール、ソート。
リストの操作
append で末尾追加、insert で挿入、remove で値削除、pop で末尾/指定位置を取り出し、index で位置、count で数を取得。
辞書の操作
.get で取得、update や | でマージ、items で反復、値で並べ替え、ネストした辞書へのアクセス。
集合演算
和集合 |、積集合 &、差集合 -、対称差 ^。メンバ判定は O(1)。重複除去に向きます。
タプルの使い方
tuple は不変シーケンスで、複数の戻り値、レコード、辞書のキーに向きます。namedtuple はフィールド付きの派生版です。
collections のツール
Counter は集計、deque は両端キュー、defaultdict はキー既定値、OrderedDict は順序付き辞書です。
ソート
sorted は新しいリストを返し、list.sort はその場でソートします。key で比較対象を指定し、reverse=True で逆順。
スライス
seq[start:stop:step] でスライス。負のインデックスは末尾から数えます。反転、ステップ、コピーに使います。
ヒープとキュー
heapq は優先度付き処理、queue はスレッドセーフなキュー(優先度キューを含む)を提供します。
9.メモリとパフォーマンス
ガベージコレクション、参照カウント、メモリ計測ツール、性能最適化。
ガベージコレクション
参照カウントを中心に、世代別 GC が循環参照を回収します。手動で free を呼ぶ必要はありません。
memoryview とゼロコピー
memoryview はバッファをコピーせずにビューで扱います。大規模なバイナリ処理を効率化できます。
弱参照
weakref.ref は参照先の回収を妨げません。大きなオブジェクトのキャッシュや循環参照リークの防止に有用です。
__slots__ でメモリ節約
__slots__ で属性を固定し、インスタンスごとの __dict__ を省きます。数百万個の小オブジェクトでメモリと速度を改善。
大規模データ処理
大きなデータはチャンクで処理し、反復は遅延評価にしましょう。全量を一度に読み込まず、ファイルを 1 行ずつストリームします。
プロファイリング
cProfile で時間計測、timeit でマイクロベンチマーク。ボトルネックがわかってから最適化します。
性能最適化のコツ
ローカル変数はグローバルより速く、内包表記はループより速く、集合の検索は O(1)。ループ内の重い計算は外に出しましょう。
よくあるメモリエラー
MemoryError(メモリ不足)、RecursionError(スタックあふれ)、循環参照。診断ツールも紹介します。
10.クラスとオブジェクト
class の定義、継承、特殊(ダンダー)メソッド、dataclass、enum。
クラスの基礎
class で型を定義します。__init__ で初期化し、self がインスタンスを指します。インスタンスメソッドはインスタンスに束縛されます。
属性アクセス
インスタンス属性はクラス属性より優先されます。setattr/getattr/hasattr で動的に扱い、property で算出属性を定義します。
3 種類のメソッド
インスタンスメソッドは self、クラスメソッドは cls、staticmethod はどちらも取りません。@staticmethod/@classmethod で修飾します。
継承
サブクラスは親クラスのメソッドを継承します。super() で親を呼び、オーバーライドで上書き。多継承は MRO に従います。
ダンダーメソッド
ダブルアンダースコアのメソッドは組み込みの振る舞いをカスタマイズします: __repr__ 表示、__eq__ 等価、__len__ 長さ、__add__ 加算。
dataclass
@dataclass は __init__、__repr__、__eq__ などを自動生成する宣言的な書き方です。
Enum 列挙
Enum は名前付きの定数集合を定義します。str 、自動採番、反復をサポートし、マジックナンバーの置き換えに使えます。
コンテキストマネージャ
with がリソース管理を担います。__enter__/__exit__ を実装するか、@contextlib.contextmanager でジェネレータとして書きます。
11.例外処理
try-except、例外階層、自作例外、with によるリソース管理。
try / except
例外を捕捉してエラーを処理します。except は型で絞り込み、as e で例外オブジェクトを取得できます。
else と finally
else は例外なしのときに実行され、finally は成功失敗に関わらず実行されるため、クリーンアップに適します。
例外階層
Exception が多くの例外の基底クラスで、代表例として ValueError、TypeError、KeyError、IndexError があります。
自作例外
Exception を継承して業務例外を定義し、フィールドやメッセージを持たせます。呼び出し側は型で捕捉します。
raise と連鎖
raise で能動的に投げ、raise ... from ... で原因を連鎖させます。except 内の素の raise は現在の例外を再送出します。
assert
assert は開発時の不変条件チェックです。python -O で無効化されるため、ユーザー入力の検証には絶対に使わないでください。
例外とロギング
logging を使うとスタック付きで例外を記録できます。except ブロック内では logger.exception が定番です。
エラー処理のパターン
EAFP(許可を求めるより許しを請う)と LBYL(よく見てから飛ぶ)。ガード節で早期 return を使うとネストが減ります。
12.入出力
print/input、ファイル入出力、pathlib、JSON/CSV、標準ストリーム。
出力と入力
print は複数引数、sep/end で区切りと末尾を制御できます。input は 1 行を str で読み取ります。
ファイルの読み書き
open のモード: r 読み込み、w 書き込み、a 追記、b バイナリ。読み込みは read/readline/readlines。
with とファイル
with は例外発生時もファイルをクローズします。ファイルを扱う際のイディオムです。
pathlib のパス
Path はプラットフォーム非依存のパス操作(/、 exists、mkdir、read_text など)を提供し、os.path の現代版です。
JSON の読み書き
json.loads/dumps でシリアライズし、dict/list と JSON を相互変換します。ensure_ascii=False で日本語などをそのまま保てます。
CSV の読み書き
csv モジュールでカンマ区切りを扱います。writer で書き込み、reader / DictReader で読み込みます。
標準ストリーム
sys.stdin/stdout/stderr でパイプデータを扱い、stdin を 1 行ずつ処理します。
バイナリ I/O
バイナリモードでバイト列を読み書きします。struct でパック/アンパックし、seek/tell でランダムアクセス。
13.よくある落とし穴
Python の日常開発で踏みやすい落とし穴と正しい書き方。
可変なデフォルト引数
可変なデフォルト引数は関数定義時に 1 度だけ作られ、呼び出し間で共有されます。None をセンチネルにしましょう。
is と == の混同
is は同一性、== は値を比較します。小さな整数/短い文字列はインターン化されることがありますが、内容比較に is を使わないでください。
ループ内クロージャの落とし穴
ループ内の lambda は変数を実行時に評価するため遅れて束縛されます。今の値を必要とするなら既定引数で固定します。
文字列連結
ループで += 連結すると O(n^2) になります。リストに集めてから join するか、io.StringIO を使いましょう。
反復中のリスト変更
反復中にリストを変更すると要素の飛ばし/重複が生じます。コピーに対して反復するか、新しくリストを作り直しましょう。
組み込み名のシャドーイング
組み込み名を変数に使うと元の関数が隠されます。list、str、input、sum などの上書きは避けましょう。
例外の飲み込み
素の except は KeyboardInterrupt まで含めて全部飲み込みます。最低限ログするか、具体的な型で絞り込みましょう。
グローバル変数の誤用
関数内で代入すると新しいローカルになり、グローバルは変わりません。global 宣言が必要です。
コピーとソート
list.sort はその場でソートし、sorted は新しいリストを返します。共有参照による想定外の変更に注意。
14.並行と非同期
threading、asyncio、GIL、そして並行処理モデルの選び方。
スレッドの基礎
threading.Thread でスレッドを作り、start で起動、join で完了を待ち、daemon=True でデーモン化します。
スレッドクラス
Thread を継承して run をオーバーライドします。データ共有にはロックを使い、ワーカースレッドをきれいにまとめられます。
ロックと同期
Lock が共有状態を守り、with lock で取得/解放を自動化します。RLock は同じスレッドから再入できます。
GIL と並列処理
GIL のため CPython のスレッドは CPU バウンドを並列化できません。I/O バウンドでは依然として有効です。
マルチプロセス
multiprocessing は CPU バウンドをプロセスプールで並列化し、ProcessPoolExecutor が高水準のラッパーを提供します。
asyncio の基礎
async def でコルーチン、await で中断、asyncio.run がイベントループを駆動します。
async / await
async でコルーチンを宣言し、await で結果を待ちます。gather で並列実行、asyncio.timeout でタイムアウトを指定。
非同期 I/O
aiohttp / httpx で非同期 HTTP、aiofiles で非同期ファイル I/O。I/O バウンドでは飛躍的にスループットが向上します。
エグゼキュータ
ThreadPoolExecutor がスレッドプール、ProcessPoolExecutor がプロセスプール。どちらも submit / map を共通 API で提供します。
15.ネットワークとモジュール
モジュールシステム、HTTP リクエスト、URL 処理、サーバー。
モジュールとインポート
import でモジュールを読み込み、from x import y で特定の名前を取り込みます。パッケージは __init__.py を持つディレクトリです。
HTTP リクエスト
requests ライブラリ: GET/POST、クエリパラメータ、ヘッダー、JSON ボディ、ステータスコードの判定。
urllib 標準ライブラリ
urllib.request はサードパーティ不要の HTTP クライアント、urllib.parse は URL パーサです。
簡易 HTTP サーバー
http.server は静的ファイルや簡易サーバーを提供し、BaseHTTPRequestHandler をサブクラス化して拡張できます。
ソケット通信
socket は低水準の TCP/UDP インターフェースで、ソケット接続、送受信、パケット解析に使えます。
URL とパラメータ
urlparse で URL を分解、urlencode でクエリ文字列を構築、quote でパーセントエンコード、urljoin で相対パスを解決します。
設定と環境
os.environ で環境変数にアクセスし、python-dotenv で .env を読み込みます。設定は階層化して管理します。
API 呼び出しパターン
リトライ、レート制限、エラー処理をラップします。pydantic でレスポンスを型付きバリデーションするのが定番です。
16.日時
datetime、フォーマット、timedelta、タイムゾーン。
datetime の基礎
datetime のコンストラクタ、date / time サブクラス、属性アクセス、比較演算。
フォーマットと解析
strftime でフォーマット、strptime で解析。指定子: %Y 年、%m 月、%d 日、%H 時。
timedelta
timedelta で日/時間などの差を表現し、加減算や 2 つの日付の差を求めます。
タイムゾーン
timezone は固定オフセット、zoneinfo(3.9+)は IANA 名でタイムゾーンを表します。保存は UTC、表示は現地の運用が堅実です。
タイムスタンプ
Unix 秒のタイムスタンプを .timestamp() で取得、fromtimestamp() で復元。比較と保存に便利です。
タイミングと待機
time.sleep で待機、time.perf_counter で高精度計測、定期ジョブには schedule ライブラリが便利です。
日付ユーティリティ
曜日の判定、月初・月末、相対日付、日付範囲を扱います。calendar モジュールが頼りになります。
時間区間の判定
時刻が区間内か、区間の重複か、残り時間かを判定します。スケジュールや制限時間タスクで頻出です。
17.プロセスとシステム
subprocess、sys/os モジュール、コマンドライン引数、シグナル。
subprocess
subprocess.run で外部コマンドを実行し、出力を取得、リターンコードを確認、タイムアウトを設定できます。
sys モジュール
sys.argv は CLI 引数、sys.exit は終了コード、sys.path はモジュールの検索パスです。
os モジュール
os は環境、パス、ディレクトリ操作を提供します。os.getcwd で現在ディレクトリ、os.mkdir で作成。
argparse
argparse は引数の解析、ヘルプ生成、デフォルト値を提供します。CLI ツールの定番です。
終了コード
0 が成功、それ以外が失敗。CI/スクリプトは終了コードで成否を判定します。未捕捉の例外はデフォルトで 1。
ファイルとプロセス
大容量ファイルの処理、ファイルロック、テンポラリファイル、原子的書き込み。
シグナル処理
signal は Ctrl+C や SIGTERM を捕捉して Graceful shutdown を実現します。POSIX 中心で、Windows は制限あり。
デーモンとバックグラウンド
バックグラウンド実行、ログローテーション、デーモン化。supervisor や systemd で運用します。
18.正規表現とテキスト
re モジュールのマッチング、検索、置換、グループ、コンパイル。
match と search
re.match は先頭からの一致、re.search は全文検索。Match または None を返します。
findall と finditer
findall は全マッチのリストを返し、finditer はイテレータで 1 件ずつ返します(大きい入力に省メモリ)。
sub での置換
re.sub は正規表現で置換し、置換文字列では \1 などの後方参照、関数を渡せば動的な置換もできます。
split
re.split は正規表現で分割し、複数区切り、キャプチャ保持、分割上限を指定できます。
グループ
() はキャプチャ、(?P<name>) は名前付き、(?:) は非キャプチャ、| は選択。
フラグ
re.I は大小無視、re.M は複数行、re.S は . が改行に一致、re.X は冗長モード。
よく使うパターン
メール/電話番号/URL/IP/日本語などに使う定番パターンをまとめ、業務フォーマットの検証に使います。
正規表現のパフォーマンス
事前コンパイル、再帰的量詞による catastrophic backtracking の回避、量詞の境界制限。大きなテキストは分割して。
19.ビルドとエンジニアリング
依存関係管理、仮想環境、テスト、Lint、CI。
requirements.txt
pip freeze で requirements.txt を生成し、pip install -r でインストール。バージョンを固定すれば再現性が保たれます。
venv の実践
ベストプラクティス: プロジェクトごとに 1 つ、.venv はコミットしない、壊れたら作り直す。
最新のパッケージマネージャ
uv は超高速な依存マネージャ、poetry は依存とパッケージングを統合。ロックファイルで再現性を確保します。
pytest でのテスト
テスト関数は test_ で始めて assert を書きます。fixture で共有セットアップ、parametrize でパラメータ化。
unittest 標準ライブラリ
標準ライブラリのテストフレームワーク。TestCase を継承し assertXxx を使い、setUp / tearDown でライフサイクルを管理します。
Lint とフォーマッタ
ruff で高速 Lint とフォーマット、black でスタイル統一、mypy で型検査。ルールは pyproject.toml に集約。
パッケージングと公開
pyproject.toml でパッケージングを設定し、sdist/wheel をビルド、twine で PyPI に公開します。
CI とデプロイ
パイプラインの段階: lint、型検査、テスト、ビルド。GitHub Actions で構成します。
このチートシートについて
このページは Python 3.11 の自己完結型クイックリファレンスです。言語コアと、実プロジェクトで日常の約 80% を占める標準ライブラリを扱います。f-string、リスト内包表記、ジェネレータ、コンテキストマネージャ、型注釈、データクラス(dataclass)、そして collections、itertools、pathlib といった実用的な標準ライブラリモジュールを重視しています。Python は 1991 年に Guido van Rossum によって公開され、読みやすい構文と「バッテリー同梱」の標準ライブラリで知られ、データ分析、機械学習、自動化スクリプト、Web 開発(Django / FastAPI)で広く使われています。 19 のセクションはそれぞれ 1 つのテーマに焦点を当てます: 基本構文、変数、型と参照セマンティクス、制御フロー、関数、文字列、リストと辞書、メモリと参照カウント、クラスと OOP、例外処理、入出力、よくある落とし穴、並行処理(スレッド/非同期)、ネットワーク、時間、プロセス、正規表現、そしてビルドツール(pip/venv)。各サブセクションには短い概念説明とコピー&ペースト可能なコードスニペットが付いています。 すべてのコードとテキストはブラウザ内でレンダリングされ、データは一切デバイスから外部へ送信されません。正式なリファレンスは Python 公式ドキュメントを参照してください。
バージョン 2.1.0