Python講座 / 関数を定義し、戻り値を返す
関数は処理に名前を付け、引数を受け取って結果を返す仕組みです。結果をreturnすることと画面へprintすることを分けると、同じ計算を別の場所でも利用しやすくなります。
定義・引数・結果の役割を読む
defは関数名と字下げされた本体を定義します。定義に書く名前が仮引数、呼び出すときに渡す値が実引数です。関数を定義しただけでは、その本体は実行されません。
returnは現在の呼び出しを終了し、結果を呼び出し元へ返します。値を返すreturnへ到達せず終わるとNoneになります。計算結果を表示するだけの関数と、結果を値として返す関数では、呼び出した後にできることが異なります。
関数呼び出しの規則と名前の範囲は、変数のスコープ・別名・可変オブジェクトを理解するで扱う規則とつながります。
関数を呼び出して結果を再利用する
functions.pyへ全体コードをUTF-8で保存し、仮想環境でpython functions.pyを実行します。
def total_with_fee(amount, fee):
"""Return the sum of the amount and fee."""
return amount + fee
first = total_with_fee(8000, 500)
second = total_with_fee(3500, 0)
print(first, second)
print(first + second)
予想結果です。二回の呼び出しで得た値を、最後にもう一度足しています。
8500 3500 12000
関数の責務と前提を決める
この例は、足し合わせられる二つの数値を受け取ることが前提です。負数や端数を認めるかは別の契約になります。適切な境界でデータを検証し、内部の小さな関数には前提を明示します。すべての関数に、考えられる入力を無制限に扱わせる必要はありません。
処理の内容を表す名前を付け、入力要求、計算、ファイル保存を一つへ詰め込みすぎないようにします。docstringには結果、必要な条件、関係する例外を説明し、コードが保証していない性質を書かないでください。
戻り値と呼び出しの失敗を調べる
feeを500から1000へ変えると、最初の結果は9000になります。returnを一時的にprintへ替え、firstに何が入るかを確認したら戻します。関数定義が実行される前に呼び出すと、名前が未定義になることも試せます。
関数内のローカル変数は、通常は外側から直接読めません。必要な値をreturnで返し、隠れた外部状態へ依存させないようにします。引数不足のTypeErrorなら、定義と呼び出しを照合します。省略可能な値は引数と既定値で扱います。
returnは関数を終了して呼び出し元に値を返します。printは表示する処理で、print自体の戻り値はNoneです。合計を別の計算やテストで使うならreturnし、表示するかどうかは呼び出し元が決めます。
| 操作 | 結果 | 観察 |
|---|---|---|
| return total | 呼び出し元へtotal | 表示なし |
| print(total) | None | 画面に表示 |




