Noneというものをご存じでしょうか?
Javaなどの他のプログラミング言語ですとNullとあらわされていましたが、pythonではNullというものはなく、変わりにNoneが使用されています。
今回はこのNoneについて解説していきます。
Noneとは?
ではそもそもNoneとはどういったものなのか?ですが・・・
簡単に言うと何の値も入っていない状態の事を表します。
例えば下記のようなプログラムがあったとします。
def ka():
pass
print(ka())
上記はka()という関数の戻り値の値を表示させようとしています。
しかし上記はreturn文が記載されていないため戻り値なしの状態と言えます。
そのため結果は何の値も戻ってこないため出力結果は「None」となります。
このように本当に何の値もない場合にNoneが出力されます。
因みに下記のように文字列が何も入っていない状態はNoneではなく文字列が何もない状態のためNoneとは異なり、出力結果もブランク表示となります。
また何の文字も入っていない文字列変数と、Noneの入っている変数を比較するとFalseという結果となり異なるオブジェクトであることが分かります。
【コード】
a=""
b=None
print(a)
print(b)
print(b is a)
【実行結果】
None
False
Noneを判定する方法
変数の中身がNoneなのかを判定する方法が存在します。
Noneを判定する場合は==演算子でもいいですが、先ほども少し記載しましたis演算子を使用します。
その理由として下記2点があります。
- シングルトンオブジェクトであるため
- 処理速度が速いため
「シングルトンオブジェクトであるため」とは、単純に一つしか存在しないオブジェクトという意味です。
ではなぜシングルトンオブジェクトであるからis演算子を使用すべきかというとそこには複雑な理由が存在します。
まず大前提として==演算子は値が等しいことを比較するときに使用し、is演算子はオブジェクトが等しいかを判断するときに使用します。
こちらの紹介はまた別の記事で実施いたしますが、下記コードのように同じ要素のリストでも==演算子とis演算子では異なる結果となることが分かると思います。
【コード】
a1=[1,2,3]
a2=[1,2,3]
print(a1==a2)
print(a1 is a2)
【実行結果】
True
False
==演算子とis演算子にはこのように異なる結果となることがあります。
因みにNoneは==演算子だろうとis演算子だろうと同様の結果となります。
ならどちらを使用してもいいのではないかと思う方もいるかもしれませんが、同値性と同一性の概念からis演算子の使用が推奨されています。
同値性とは==演算子で判定できるもので、同じ値かどうかを判断する際に使用します。
そして同一性とはis演算子を使用することで判断することができるもので、全く同じオブジェクトであるということを判断する際に使用します。
現実で考えてみると==演算子は自分と同じ苗字の人を見つけることはできますが、自分自身をピンポイントで見つけることはできません。
しかしis演算子ですと苗字で検索をかけるとピンポイントで自分自身を見つけ出すことができます。
このためシングルトンオブジェクトを検索する場合同一性の観点で比較する方が確実であるためis演算子の使用が推奨されています。
もう一点の理由の方は説明するまでもありませんが、単純に処理速度が速いためis演算子の使用が推奨されているというだけです。
早いと言ってもおそらく人が感じることができないぐらいの誤差でしかないかと思います。
return Noneとは?
最後にretun Noneについて解説しておきます。
時々コードを見ていると「return None」というようにNoneを戻り値として返していることがあります。
しかしよく考えてみると戻り値を返さないようにすればいいのではないか?と気が付く方もいるのではないでしょうか?
確かに戻り値を返さなければNoneとなりますが、たまに返す戻り値はないが、何かしら戻さないといけないということがあります。
def ka1(a):
if a>=20:
return "成人済みです"
else:
return None
print(ka1(19))
上記コードでは20以上の値だと「成人済みです」という文字列を出力したいが、それ以外は特に何も出力したくないとなったので、elseではNoneを戻り値として使用しています。
このような場面で「return None」を使用します。
まとめ
この記事ではpythonのNoneについて解説してきました。
- Noneとは?
- Noneを判定する方法
- return Noneとは?
他のプログラミング言語を触っているととっさにNullと記載してしまうことがありますが、pythonではNoneを使用することで同様の結果を生むことができます。
プログラミング言語を触るのが初めてという方は何も入っていない状態ということに少し戸惑いがあるかもしれませんが、慣れてくるとなんてことないので、ぜひたくさん使って慣れていってください。
以上で今回の解説は終了となります。
コメント