まず結論

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

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

message = make_message()
print(message)

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

こんなときに読む記事です

次のようなところで止まった人向けです。

  • 関数の中で print() しているのに結果が使えない
  • return が何のためにあるのか分からない
  • None が返ってきて困っている

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

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つの使い分けだけで十分です。