まず結論

関数の中で作った変数は、基本的に関数の外では使えません。

def make_message():
    message = "こんにちは"

make_message()
print(message)

このコードは NameError になります。
message は関数の中で作られた名前だからです。

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

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

  • 関数の中で作った変数を外で使えない
  • NameError が出る理由が分からない
  • return が必要な場面が分からない

変数には「使える場所」があります。

関数の中だけで使える

関数の中で作った変数は、その関数の中で使えます。

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

say_hello()

この場合、message は関数の中で使っているので問題ありません。

外で使いたいならreturn

関数の外で値を使いたいなら、return で返します。

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

result = make_message()
print(result)

return された値を、外側の result に入れています。

同じ名前でも別の変数

関数の中と外で同じ名前を使っても、別の変数として扱われることがあります。

message = "外"

def show():
    message = "中"
    print(message)

show()
print(message)

中では "中"、外では "外" が表示されます。

読み方のコツ

関数の中は、小さな部屋のようなものです。
その部屋で作った変数は、外から直接見えないと考えると分かりやすいです。

外で使いたい結果は、return で渡しましょう。