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

    LINEで送る
    Pocket

    ITエンジニアへ転職したい方におすすめ

    自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
    エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

    しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

    こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

    そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

    侍ワークスは、独自案件を多く掲載しているだけでなく、

    ・応募から就業まで一貫したサポート

    ・就業後もアフターフォロー

    といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

    まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

    書いた人

    Kotono

    Kotono

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