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

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

この記事では

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

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

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

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

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

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

プログラミング学習中、
誰かへ相談したいことはありませんか?

SAMURAI TERAKOYA

プログラミングはエラーの連続。作業を進めるなかで誰かに教えてほしい場面は多いですよね。

そんな悩みを解決できるのが、侍テラコヤです。月額2,980円から学べて、現役エンジニアとオンラインで相談できるほか、回答率100%のQA掲示版でプログラミングに関する悩みを解決します!

公式サイトからご入会いただくと、お得なクーポンを利用できるので、気になる方はぜひ詳細をご覧ください。

詳しくはこちら

Writer

Kotono

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

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI TERAKOYA

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら
Close