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

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

この記事では

  • nullオブジェクトとは
  • Noneとnullの違いについて
  • といった基本的な内容から

  • is と == の違いについて
  • return None とは
  • などといったより発展的な内容に関してもわかりやすく説明していきます。

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

    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に関する知識を深めて行ってくださいね。

    「プログラミング、右も左もわからない…」という方にオススメ

    当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

    その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

    侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

    cta_under_bnr

    「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

    書いた人

    Kotono

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

    おすすめコンテンツ

    まずはここから!初心者でも1から学べるプログラミング入門カリキュラム

    転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー