【Python入門】nullオブジェクト「None」とは

今回はPythonにおけるnullオブジェクト「None」について解説していきたいと思います。Pythonでは他のプログラミング言語とは少し違い、nullというキーワードではなく「None」を使用します。

この記事では

  • nullオブジェクトとは
  • Noneとnullの違いについて

といった基本的な内容から

  • is と == の違いについて
  • return None とは

などといったより発展的な内容に関してもわかりやすく説明していきます。

※ この記事のコードはPython 3.7で動作確認しました。

本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。

→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説

なお、その他のPythonの記事についてはこちらにまとめています。

目次

nullオブジェクトとは

皆さんは「nullオブジェクト」が何かわかりますか?nullオブジェクトを使用したことはありますか?

nullとは「何もない」、「空」を指す言葉です。その為、nullオブジェクトは「空っぽ」の状態を表すオブジェクトです。

プログラミング言語によってnullオブジェクトの呼び名はそれぞれですが、概念は共通しているので知っておいて損はないでしょう。

Noneとnullの違いについて

先ほど、プログラミング言語によってそれぞれnullオブジェクトの呼び名があると書きましたが、PythonではNoneを扱います。Noneとnullが全く同じものである、とは言わないですが、同じ使われ方をするものです。

では実際にNoneがどのようなシチュエーションで出現するのかを見てみましょう。

以下のサンプルコードをご覧ください。

mydict = {"orange":1,"apple":2,"peach":3}
print(mydict.get("orange"))
print(mydict.get("melon"))

出力結果は以下の通りです。

1
None

上のコードでは、mydictという名の辞書型オブジェクトを作成し、getメソッドで引数に与えたキー(key)とペアの値(value)を取り出しています。

orangeという文字列がキーの場合値は1なので、出力結果の一列目は1と表示されました。しかし、melonという名のキーはmydict内には存在しないので、Noneと表示されました。

また、このような存在しないキーの検索の場合のみでなく、関数の戻り値などでもNoneが表示されることがあります。以下のコードをご覧ください。

def myfunc():
    print("Hello world!")
print(myfunc())

出力結果は以下の通りです。

Hello world!
None

上のコードでは、myfuncという関数を作成しました。myfuncはシンプルにHello world!という文字列をprint関数で表示させるだけのものです。return文がないため、関数の戻り値はありません。

しかし、print(myfunc()) はmyfunc関数の存在しない戻り値を表示させようとしています。その為、myfuncは実行されHello world!が一行目に表示され、そしてその戻り値を二行目に表示しようとするとNoneが現れました。

このように、様々なシチュエーションにてNoneが出現することがわかりました。

is と == の違いについて

複数のオブジェクトを比較したい場合、is演算子や == が使えます。二つの演算子の明確な違いと言えば、isはオブジェクトが同一かどうか調べる、==は同じ値を持っているか調べる、ということです。

厳密に言えば、オブジェクトはそれぞれ固有のIDを保持しており、is演算子ははこのIDを比較して同一のオブジェクトかどうかを調べる働きがあります。

オブジェクトとNoneを比較する場合は、is演算子を使用することが推奨されています。

理由は、処理が早く済むことや、Noneがシングルトンオブジェクト(そのクラスのオブジェクトは1つのみ、複数のインスタンスの作成が不可能であること)である、などということが挙げられます。

その為、比較は以下のように行いましょう。

if myobj is None :
   ...

is演算子の代わりに、is notも使用することも出来ます。

return None とは

Pythonでコードを書いていると、一度は目にしたことがあるかもしれない「return None」ですが、実際はどのような場合に使用されるのでしょうか。

自作した関数の戻り値が必要ない場合はreturn文は省いてよいので、何も書きません。

しかし、return Noneと記されている場合は「戻り値は必要だが、あるケースに限っては必要ない」というシチュエーションが挙げられます。以下のコードをご覧ください。

def myfunc(x):
    if x > 10 :
        return "Hello!"
    else :
        return None

print(myfunc(15))
print(myfunc(5))

出力結果は以下の通りです。

Hello!
None

上のコードでは、myfunc関数を作成しました。myfuncは引数に与えられた数字が10より大きければHello!という文字列を返し、そうでなければNoneを返します。

実際、myfuncに15という引数を与えた場合Hello!と表示され、5を与えた場合はNoneが正しく表示されました。

このように、関数内で条件分岐を行った際などに便利なので、覚えておくと良いコツですね。

まとめ

今回はPythonにおけるnullオブジェクト「None」について解説しました。

Noneは比較的頻繁に出現するキーワードなので、どのような時に使われるのか知っておくと損はありません。

皆さんもぜひこの記事を通してPythonに関する知識を深めて行ってくださいね。

この記事を書いた人

イタリア在住15年目の22歳です。イタリアの大学で情報科学&応用数学を学んでいます。主にJavaScriptやPythonについての記事を書いたりしています。

目次