文系出身が Python で混同した print と return の違い

文系出身が Python で混同した print と return の違い

2026.06.24

はじめに

文系出身未経験から新卒で入社し、約 2 ヶ月が経過しました。
現在、研修で一通り Python についての学習を終えました。
Python を勉強していると、関数内で print と return の両方に出会います。
初心者は「どちらも結果を表示するのでは?」と混同しがちです。
しかし、実際には return は値を表示しません。
print は値を画面に表示するための処理で、return は関数の呼び出し元に値を返すための処理です。
返された値を画面に表示したい場合は、呼び出し元で print を使う必要があります。
この記事では、私が実際に混同していた print と return の違いを、具体例とともにまとめます。
この記事は Python 初学者を対象としています。

print を実行すると、値が標準出力に表示されます。
通常はターミナルに表示されますが、file 引数を使うとファイルなど別の出力先にも書き出せます。
しかし、その値は関数の戻り値として呼び出し元に渡されるわけではありません。

print には以下の特徴があります。

  • 画面に値を表示する
  • 関数の外に値を渡さない
  • print の戻り値は None である(「何もない」という特別な値)
  • print() に渡した値を print() 経由で取得することはできない
  • return に到達するまで関数内の処理が続く(print は関数を終了させない)

print() は値を表示するだけで、表示した値を戻り値として返すわけではありません。
ただし、print() に渡す前の値を変数に入れておけば、その値自体はその後も使えます。
原則として、print を実行しても関数は終了せず、次の処理に進みます。
一方、return に到達すると、指定した値を戻り値として呼び出し元に返し、関数の実行を終了します。

Python 公式ドキュメント「print()」では、以下のように説明されています:

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

オブジェクトを標準出力に出力します。

つまり、print は値を標準出力(画面)に出力するだけで、その値を関数の外に渡すわけではないということです。
そのため、print を使った関数の結果を変数に代入すると、その変数には None が入ります。
その後、その変数を使って計算することはできません。

実装例:print を使った場合の動作確認

今回の検証環境は以下の通りです。

  • macOS
  • Python 3.12.7
  • VS Code

手順 1:VS Code でフォルダを開く

  1. VS Code を起動
  2. Cmd + O を押し、「Open Folder」をクリック
  3. 任意のフォルダを選択(例:Desktop)

手順 2:新しいファイルを作成

  1. 新規ファイルを押して新しいファイルを作成
  2. ファイル名を入力:test_print.py
  3. 作成ボタンをクリック

手順 3:コードを入力

以下のコードをエディタに入力します。
IMG_0293

手順 4:ファイルを保存

Cmd + S を押してファイルを保存

手順 5:コードを実行

右上の再生ボタン(▶)をクリック

実行結果はターミナルに以下のように出力されます。
IMG_0292

処理フロー:

  1. 4 行目:add(1, 2) を呼び出す
  2. 2 行目:print(a + b) が実行されて 3 を表示
  3. 関数が終了する(return がないので None が返される)
  4. 4 行目:result = None になる
  5. 5 行目:print(result) が実行されて None を表示

重要なポイント:print は値を表示しますが、関数の戻り値は None です。

return | 値を呼び出し元に渡す

print は組み込み関数ですが、return は関数内で使う文です。
return を実行すると、指定した値を戻り値として呼び出し元へ返します。

return の特徴

return には以下の特徴があります。

  • 値を関数の呼び出し元に渡す
  • 渡された値は変数に代入できる
  • 後の処理で値を使うことができる
  • return に到達すると、その時点で関数の処理が終了する(ただし、try ... finally がある場合は、関数から抜ける前に finally の処理が実行される)
  • return がない場合は None が返される

Python 公式ドキュメント「関数を定義する」では、以下のように説明されています:

return 文では、関数から一つ値を返します。return の引数となる式がない場合、None が返ります。関数が終了したときにも None が返ります。

つまり、return を使うと、関数の結果が呼び出し元に渡されるということです。
その値は変数に代入でき、その後の処理で活用できます。

実装例:return を使った場合の動作確認

手順 1:新しいファイルを作成

print の際と同様に、新しいファイルを作成し、test_return.py という名前で保存

手順 2:コードを入力

以下のコードをエディタに入力します。
IMG_0296

手順 3:実行

右上の再生ボタン(▶)をクリック

実行結果はターミナルに以下のように出力されます。
IMG_0298

処理フロー:

  1. 4 行目:add(1, 2) を呼び出す
  2. 2 行目:return a + b で 3 を返す
  3. 4 行目:result = 3 になる
  4. 5 行目:print(result) で 3 を表示

重要なポイント:return で返された値は変数に代入され、後の処理で使用できます。

項目 print return
役割 画面に表示するだけ 値を呼び出し元に渡す
戻り値 None 指定した値
変数に代入 代入自体は可能だが None が入る できる
後で使える ❌ ✅
使う場面 結果をユーザーに見せたい 結果を後の処理で使いたい
関数の終了 しない する

日常生活で例えると

友人に計算結果を伝える場面を想像します。

友人に「3 です!」と大きな声で叫ぶ
↓
その情報は空気中に消える
↓
後で使うことができない

return の場合

友人に「3 です」とメモに書いて渡す
↓
そのメモを保管しておく
↓
後でそのメモを見返して、さらに計算に使える

print は「情報を表示するだけ」の操作です。
表示された情報は画面上には残りますが、プログラム内の変数などには保持されないため、後続の処理で利用することはできません。
一方、return は「情報を渡す」操作です。
渡された情報は変数に保管でき、後でいつでも使うことができます。
つまり、print は「結果を表示する操作」で、return は「結果を渡す操作」と考えると分かりやすいです。

場面 1:結果をユーザーに見せたいだけ

def greet(name):
    print(f"こんにちは、{name}さん!")

greet("タクヤ")
# → こんにちは、タクヤさん!

場面 2:処理の途中経過を確認したい

def process_data(data):
    print(f"処理開始: {data}")
    result = data * 2
    print(f"処理完了: {result}")
    return result  # ←結果を返す

process_data(5)
# → 処理開始: 5
# → 処理完了: 10

return を使うべき場面

場面 1:結果を後で使いたい

def calculate_tax(price):
    return price * 1.1

total = calculate_tax(1000)
print(f"税込価格:{total}円")
# → 税込価格:1100.0円

# 後で使える
discounted = round(total * 0.9, 1)
print(f"割引後:{discounted}円")
# → 割引後:990.0円

場面 2:複数の関数を組み合わせたい

def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

result1 = add(5, 3)             # 8
result2 = multiply(result1, 2)  # 16
print(result2)
# → 16

両方使う場合:結果を返しつつ、途中経過も表示

実際には、print と return を組み合わせて使うことがあります。

def calculate_discount(price):
    discount = price * 0.1
    print(f"割引額:{discount}円")      # 途中経過を表示
    return price - discount           # 最終結果を返す

final_price = calculate_discount(1000)
print(f"最終価格:{final_price}円")
# → 割引額:100.0円
# → 最終価格:900.0円

まとめ

print と return の使い分けは、以下のように考えるとわかりやすいです。

関数を書いている
↓
「関数の結果を後で使いたい?」
↓
YES →return を使う
NO
↓
「結果をユーザーに見せたい?」
↓
YES →print を使う
NO →何もしない

補足:実務では、処理結果は return で返し、ユーザーへの表示が必要な場所だけで print することが多いです。
また、処理の途中経過や本番環境のログには、print ではなく logging を使うことが一般的です。


最初は、どちらも結果を出力するだけだと思っていましたが、実際に手を動かして実装する中で、上記のような違いがあることに気づきました。
print は「情報を表示するだけ」で、return は「情報を渡す」という根本的な違いがあります。
この違いを理解することで、より効果的で読みやすいコードを書くことができます。
特に、複数の関数を組み合わせる場面では、return を使うことで関数間のデータの受け渡しが可能になり、より複雑な処理を実現できます。
今後も一つひとつ理解を深めながら、学習を続けていきたいと思います。

参考資料

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイトをぜひご覧ください。
※2026年1月 アノテーション㈱から社名変更しました。

この記事をシェアする

関連記事