まず結論

print は画面に表示するためのものです。
return は関数の結果として値を返すためのものです。

def make_message():
    return "こんにちは"

message = make_message()
print(message)

このコードでは、make_message()"こんにちは" を返し、それを print() で表示しています。

printreturn は似て見えますが、役割はかなり違います。

イメージで考える

print は、値を掲示板に貼って見せる動きです。

return は、値を関数の外へ手渡す動きです。

画面に見えればよいなら print、あとで変数に入れて使いたいなら return と分けて考えます。

printは画面に見せる

print() は、値を画面に表示します。

def say_hello():
    print("こんにちは")

result = say_hello()
print(result)

この場合、say_hello() は画面に "こんにちは" を表示します。
ただし、関数の結果として値を返していないため、result には None が入ります。

returnは値を渡す

return は、関数を呼んだ場所へ値を返します。

def make_hello():
    return "こんにちは"

result = make_hello()
print(result)

この場合、result には "こんにちは" が入ります。
あとで変数に入れたり、別の計算に使ったりできます。

よくあるつまずき

関数の中で print() しただけでは、その値をあとから使えるとは限りません。

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

total = add(2, 3)
print(total)

5 は表示されますが、total には None が入ります。

結果を使いたいならreturn

計算結果をあとで使いたいなら、return にします。

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

total = add(2, 3)
print(total * 10)

この場合、total には 5 が入るので、さらに計算できます。

読み方のコツ

迷ったら、次のように分けて考えます。

  • 画面に見せたいだけなら print
  • 関数の外で使いたいなら return

最初はこの2つの使い分けだけで十分です。

手を動かすミニ練習

print する関数と return する関数の違いを比べてみましょう。

def show_total():
    print(1 + 2)

def get_total():
    return 1 + 2

result = get_total()
print(result)

return された値は、あとから変数に入れて使えます。