Q1次のうち、「終わりが要素数で決まる」ループに最適なのはどれですか?
Python 文法まとめ — 制御構文と関数の使い分け
Python 文法(制御構文と関数)の総まとめです。条件分岐・ループ・例外処理・関数応用を横断的に整理します。
Python 文法は「処理の流れを組み立てる道具」
Python 基礎では、int / str / list / dict といったデータを置くための型を学びました。本シリーズで扱った Python 文法 は、その上で 「データに対してどう処理を流すか」 を組み立てるための道具立てです。
大きく分けると 「条件で分岐する」「同じ処理を繰り返す」「失敗を受け止める」「処理をまとめて再利用する」 の 4 つの目的に整理できます。
制御構文 — 分岐・繰り返し・例外
条件で処理を選ぶ if 系、要素を順番に処理する ループ系、失敗を受け止める 例外系 の 3 つを横断で整理します。
| 分類 | 構文・関数 | 代表的な使いどころ |
|---|---|---|
| 条件分岐 | if / elif / else | 値や状態に応じて処理を分ける |
| 条件分岐 | all() / any() | リストの全要素・いずれかの要素が条件を満たすか一括判定 |
| 繰り返し | for + range / enumerate / zip | コレクションの要素を順番に処理する |
| 繰り返し | while | 条件が成り立つ間だけ繰り返す(無限ループ防止に注意) |
| 繰り返し | リスト内包表記 | 1 行で for + 条件 + 変換をまとめる |
| 代入式 | セイウチ演算子 := | 代入と判定を 1 行で書く(while / if の重複削減) |
| 例外処理 | try / except / finally | 実行時エラーを捕まえて後始末する |
| 例外発生 | raise / 自作例外クラス | 前提に合わない値が来たら自分から例外を投げる |
関数まわり — 処理を再利用する道具
def で関数を定義する基本は単純ですが、Python の関数は 「値として渡せる」「中で関数を作れる」「装飾できる」 といった応用機能をひと通り持っており、これらがコードの再利用性とメンテナンス性を支えています。
def を中心に、引数の柔軟さ(args/kwargs)/スコープの操作(クロージャ・nonlocal)/遅延評価(ジェネレーター)/装飾(高階関数・デコレータ・lambda・map)の 4 方向に拡張する。| 分類 | 構文・関数 | 代表的な使いどころ |
|---|---|---|
| 定義 | def / return | 処理に名前を付けて再利用する |
| 引数 | *args / **kwargs と複数戻り値 | 個数が決まらない引数を受け取る/呼び出し時に展開する |
| 注意点 | ミュータブル引数の落とし穴 | list / dict 引数は呼び出し元と共有される。デフォルトは None 推奨 |
| スコープ | 内部関数とクロージャ — global / nonlocal | 外側の変数を覚えた関数を作る/書き換える |
| 遅延評価 | ジェネレーター関数 yield | 巨大な列を 1 要素ずつ生成し、メモリを節約する |
| 関数を値として | 高階関数 | 関数を引数や戻り値として扱う |
| 関数を値として | ラムダ式 lambda | 名前なしの 1 行関数 |
| 関数を値として | map() | リストの全要素に関数を一括適用 |
| 装飾 | デコレータ @ | ログ・計測・キャッシュを既存関数に後付け |
ここから先 — class で「データと処理」を一体化する
次の Python オブジェクト指向 では、class を使ってデータ(属性)と処理(メソッド)を 1 つのオブジェクトにまとめる書き方 — オブジェクト指向プログラミング — について学びます。
QUIZ
理解度チェック
まずは1問ずつ答えてみましょう。
Q2リスト nums の 全要素が正の数か を判定するのに最も簡潔な書き方はどれですか?
Q3ログ出力や実行時間計測 など、共通処理を既存の関数に後付けしたいときに最も向いているのはどれですか?