まず結論
None は、「値がない」ことを表す特別な値です。
result = None
print(result)
これはエラーではありません。
result には「値がない」という意味の None が入っています。
None は「失敗」そのものではありません。Pythonが「ここには返す値がありません」と示していることがあります。
イメージで考える
None は、空っぽの受け取り箱に「値なし」と書かれた札が入っているイメージです。
箱が壊れているわけではありません。
関数が return で値を渡さなかったので、Pythonが「ここには返す値がないよ」と印を置いていると考えます。
どこで出てくる?
関数が何も返さないときによく出てきます。
def say_hello():
print("こんにちは")
result = say_hello()
print(result)
say_hello() は画面に表示していますが、return で値を返していません。
そのため、result には None が入ります。
printとreturnは別もの
print() は画面に表示するだけです。
関数の結果として値を返したいなら、return を使います。
def make_message():
return "こんにちは"
result = make_message()
print(result)
この場合、result には "こんにちは" が入ります。
空文字や0とは違う
None、空文字、0 は別のものです。
None
""
0
どれも「なさそう」に見えますが、意味が違います。
None: 値がない"": 文字が0個の文字列0: 数字のゼロ
確認するとき
None かどうかを調べるときは、よく is None を使います。
if result is None:
print("値がありません")
result == None と書いても動くことはありますが、Pythonでは is None がよく使われます。
手を動かすミニ練習
戻り値を書かない関数の結果を表示してみましょう。
def greet():
print("こんにちは")
result = greet()
print(result)
関数の中で表示はされますが、return がないので result には None が入ります。
3行まとめ
- Noneは値がないことを表す特別な値。
- 何もreturnしない関数はNoneを返す。
- 空文字や0とは別のもの。