結論から言うと、計算や判定の結果が必要な処理は return で値を返し、画面表示は別の関数に分けると、再利用しやすく直しやすいコードになります。

Pythonを書き始めたばかりのころは、動作確認しやすいので関数の中ですぐ print() したくなります。
ただ、そのまま処理が増えていくと、あとで結果を別の場所で使いたくなったときに困りやすいです。
この記事では、値を返す関数と表示する関数を分ける理由を、実際に動くコードで整理します。

この記事でわかること

  • returnprint() を分けたほうがよい理由
  • 結果を再利用しやすい関数設計の基本
  • 実務でテストしやすい形にする考え方

完成コード

完成コードは次の通りです。

def calculate_invoice_total(items):
    total = 0
    for item in items:
        total += item["price"] * item["quantity"]
    return total


def build_invoice_message(customer_name, total):
    return f"{customer_name}さんの請求金額は {total} 円です。"


def show_invoice_message(customer_name, items):
    total = calculate_invoice_total(items)
    message = build_invoice_message(customer_name, total)
    print(message)


sample_items = [
    {"name": "ノート", "price": 500, "quantity": 3},
    {"name": "ペン", "price": 120, "quantity": 5},
]

show_invoice_message("田中", sample_items)
invoice_total = calculate_invoice_total(sample_items)
print(f"数値として再利用する合計金額: {invoice_total}")

コードのポイント

このコードでは、計算、文字列作成、表示をそれぞれ別の役割として分けています。

  • calculate_invoice_total() は合計金額という数値を返します
  • build_invoice_message() は表示用の文字列を返します
  • show_invoice_message() は最後に print() して画面に出します

こうしておくと、計算結果を画面表示だけでなく、ログ保存や別計算にも使い回しやすくなります。

コードを順番に説明します

主要な処理を分けて説明します。

1. 計算処理は値を返すことに集中させます

def calculate_invoice_total(items):
    total = 0
    for item in items:
        total += item["price"] * item["quantity"]
    return total

この関数は、請求金額を計算して返すことだけを担当しています。
print() を入れてしまうと、数値が必要な場面でも画面表示がセットになってしまい、再利用しにくくなります。

計算結果を返しておけば、あとで画面表示、ファイル保存、API送信など別の用途へつなげやすいです。
このように、処理結果そのものに意味がある場合は、まず return を考えると設計しやすくなります。

2. 表示用の文章は別の関数で組み立てます

def build_invoice_message(customer_name, total):
    return f"{customer_name}さんの請求金額は {total} 円です。"

表示文の作成は、計算そのものとは別の役割です。
この部分を切り出しておくと、あとでメール用、画面用、ログ用で文面を変えたくなったときに調整しやすくなります。

数値を返す関数と文字列を返す関数を分けると、何が返ってくるのかが明確になり、読み手も理解しやすいです。

3. print() は最後の出口に寄せます

def show_invoice_message(customer_name, items):
    total = calculate_invoice_total(items)
    message = build_invoice_message(customer_name, total)
    print(message)

print() は、人に見せる最終段階でだけ使うと整理しやすいです。
途中の関数に print() が散らばると、処理の確認には便利でも、あとで別の出力方法へ変えにくくなります。

表示の責務を最後に寄せることで、同じ計算結果をそのまま他の処理でも活用できます。

実務で使うときのポイント

実務では、最初は画面表示だけで足りていても、あとから結果を保存したり別画面で使ったりすることがよくあります。

  • 合計金額、判定結果、変換後データのように意味を持つ結果は、まず値として返すと再利用しやすいです
  • print() はCLIツールの出口やデバッグ確認など、表示が目的の場所に限定すると整理しやすいです
  • テストでは、画面出力より戻り値を比べるほうが確認しやすいです
  • Webアプリやバッチ処理でも、内部ロジックが値を返す形だと他の層へつなぎやすくなります

特に、処理の途中で print() してしまう関数は、あとで「結果を使いたいのに使えない」という状態になりやすいです。
まず値を返し、必要なら最後に表示する流れを意識すると保守しやすくなります。

よくある勘違い・注意点

  • print() で画面に出せていても、値を返していなければ他の処理から再利用しにくいです
  • 計算関数の中に表示処理を混ぜると、責務が広がって修正しづらくなります
  • 戻り値があるのに同時に大量の print() を入れると、何が本来の役割か見えにくくなります
  • デバッグ用の print() をそのまま残すと、本番コードで出力が散らかることがあります

まとめ

  • 計算や判定の結果は return で返すと再利用しやすいです
  • 表示用の文章作成と print() は、別の役割として分けると整理しやすいです
  • print() は最後の出口に寄せると、他の出力方法へ切り替えやすくなります
  • 実務では、テストしやすさと保守しやすさのために戻り値中心で設計すると扱いやすいです

次の記事