制御構造と関数の要点
内容の確認日: 2026-10-04
この分野は「Pythonチュートリアル」の第 4 章 (その他の制御フローツール) に対応し、試験で最も出題数の多い章の 1 つです。前半は if・for・while などの制御構造、後半は関数の定義と、さまざまな引数の渡し方が問われます。
特に、ループの else 節、デフォルト引数が評価されるタイミング、*args・**kwargs の受け取り方は、Python 独特の仕様なので、ほかの言語の経験がある人ほど注意が必要です。
if 文と for 文
if 文は if・elif・else を組み合わせて書き、上から順に条件を調べて、最初に真になったブロックだけを実行します。elif は何個でも書けます。
for 文は、数値の範囲ではなく、リストや文字列などのシーケンスの要素を順に取り出します。数値の並びが欲しいときは range() を使います。
・range(5): 0, 1, 2, 3, 4 (5 は含まない)
・range(2, 6): 2, 3, 4, 5
・range(1, 10, 3): 1, 4, 7 (3 つ目の引数は増分)
・range(5, 0, -2): 5, 3, 1
range() が返すのはリストではなく、必要なときに値を作るイテラブルです。中身を確かめたいときは list(range(5)) のようにリストに変換します。
print(list(range(1, 10, 3)), list(range(5, 0, -2)))for word in ["cat", "window"]: if len(word) > 5: print(word, "は長い") elif len(word) > 2: print(word, "は普通") else: print(word, "は短い")python3 main.py [1, 4, 7] [5, 3, 1] cat は普通 window は長い
break・continue とループの else 節
break はループをすぐに終了し、continue はその回の残りを飛ばして次の回に進みます。
Python の for 文と while 文には else 節を付けられます。else 節は、ループが break されずに最後まで回りきったときに実行されます。break で抜けたときは実行されません。「探して、見つからなかったときの処理」を書くのに便利です。
for target in [3, 8]: for v in [1, 3, 5]: if v == target: print(target, "あり") break else: print(target, "なし")python3 main.py 3 あり 8 なし
pass は何もしない文です。文法上、文が必要だけれど何もすることがない場所 (中身が空の関数やクラスなど) に書きます。
関数の定義と戻り値
関数は def 関数名(引数): で定義し、return で値を返します。return がない関数や、値を書かずに return した関数は None を返します。関数の本体の最初に書いた文字列はドキュメンテーション文字列 (docstring) になります。
引数に既定値を付けたデフォルト引数の値は、関数を定義したときに 1 回だけ評価されます。そのため、リストのような変更可能な値を既定値にすると、呼び出しのたびに同じリストが使い回されます。避けるには、既定値を None にして関数の中でリストを作ります。
def add_item(item, box=[]): box.append(item) return boxdef add_item_safe(item, box=None): if box is None: box = [] box.append(item) return boxprint(add_item("a"))print(add_item("b"))print(add_item_safe("a"))print(add_item_safe("b"))python3 main.py ['a'] ['a', 'b'] ['a'] ['b']
いろいろな引数の渡し方
関数の引数は、次のように受け取り方・渡し方を組み合わせられます。
・キーワード引数: f(qty=2) のように引数名を指定して渡す。位置引数の後ろにしか書けない
・*args: 余った位置引数をタプルで受け取る
・**kwargs: 余ったキーワード引数を辞書で受け取る
・*args より後ろに書いた引数は、キーワード引数でしか渡せない
・呼び出すときに *リスト と書くと要素が位置引数に、**辞書 と書くとキーワード引数に展開される
def order(item, qty=1, *extras, note="-", **options): print(item, qty, extras, note, options)order("coffee")order("tea", 2, "milk", "sugar", note="hot", size="L")args = ["juice", 3]order(*args, **{"note": "cold"})python3 main.py coffee 1 () - {} tea 2 ('milk', 'sugar') hot {'size': 'L'} juice 3 () cold {}
定義のときも、デフォルト値のある引数の後ろに、デフォルト値のない引数は置けません。このような関数は、実行する前の構文の解析の時点でエラー (SyntaxError) になるので、ファイルの中のどのコードも実行されません。
print("ここは実行されない")def f(a=1, b): return a + bpython3 main.py
例外が発生: SyntaxError
lambda 式とコーディングスタイル
lambda 引数: 式 で、名前のない小さな関数を作れます。本体には式を 1 つだけ書け、その値が戻り値になります。sort や sorted の key に渡す使い方が代表的です。
pairs = [(1, "one"), (2, "two"), (3, "three")]pairs.sort(key=lambda p: p[1])print(pairs)square = lambda x: x * xprint(square(4))python3 main.py [(1, 'one'), (3, 'three'), (2, 'two')] 16
Python のコーディングスタイルの指針 PEP 8 では、インデントに空白 4 つを使う (タブと混ぜない)、1 行を 79 文字以内にする、関数名や変数名は lower_case_with_underscores、クラス名は CapitalizedWords にする、などを勧めています。
試験でよくある引っかけ
rangeの終わりの値range(1, 10, 3)は1, 4, 7です。終わりの値10は含みません。ループの
else節else節はbreakされずに最後まで回ったときだけ実行されます。breakで抜けると実行されません。戻り値のない関数
returnのない関数をprintするとNoneが出力されます。デフォルト引数のリスト
デフォルト引数は定義時に 1 回だけ評価されるので、
box=[]は呼び出しのたびに同じリストが使われます。*argsと**kwargsの型*argsはタプル、**kwargsは辞書で受け取ります。引数の順番
デフォルト値のない引数を、デフォルト値のある引数の後ろに書くと
SyntaxErrorです。
問題で確認する
この分野の問題を、解説つきで読めます (登録不要)。
出典・参考
- Python エンジニア育成推進協会「Python 3 エンジニア認定基礎試験」
- Python ドキュメント「Python チュートリアル」4. その他の制御フローツール
- PEP 8 – Style Guide for Python Code
コード例は、実際に実行して結果を確認しています。