18: 「何もない」を表現するNone型を理解する

前回の続きです。

次は何もないを表現するNone型というものを見ていきます。

そもそもNoneとは何かというと、何もないことを表現するための型です。他のプログラミング言語でいうとnullというものに相当します。

トイレットペーパーの図で説明をしますと、紙の量が0と言ったとき、この芯だけ残っている状態ですね。これが0です。

None というのは、真ん中の図にnullと書いてあるものです。トイレットペーパーの芯そのものも何もないよと言う状態。

そして右端の undefined というものがありますが、これはそもそも変数が存在してませんという状態です。

コードで表しますと、トイレットペーパーという変数が0、一番左の状態は

toilet_paper = 0

です。

真ん中の状態、toilet_paper という変数はあるけれど、何もない状態、これが none です。

toilet_paper = none

そしてトイレットペーパーという変数が定義されていない、プログラムに toilet_paper という変数がない状態が、右の undefine というイメージです。

そして、この none は0とか空文字とかそういうものとは違い、全く何もない状態を表します。

PyCharmのPythonコンソールで確認してみましょう。ある文字が同じかどうかというのを比較してみます。

'py' == 'py'

イコールをふたつ使うことによって、この左辺と右辺が同じかどうかを判定できます。このコードを実行すると、Trueとなります。同じかどうかの判定は == を使って判定できます。

以下の場合は、Falseになります。Pythonはすべての名前の大文字と小文字が区別されるからです。

'Py' == 'py'

ではNoneと0は同じでしょうか? これを比較してみます。

None == 0

結果はFalseで違うもの、という答えが返ってきます。

空文字(ダブルコーテーションの中に何も書かれていない)も試してみましょう。

None == ""

これもFalseとなります。

None同士も比較してみます。

None == None

とこれはTrueとなります。

このように、Noneは空文字でも0でもないことがわかります。「何もない」を表現するためのものです。

このNoneを使うことがあるのかというと、たまに使ったりします。たとえば、以下のように最初にtitleという変数だけ作っておいて、後でタイトルの中身を書き換える場合に使うことがあります。

title = None

もっとも、この場合、文字列が入るということが想像できますので、Noneではなくて空文字の方が適切かもしれません。が、このように一度Noneで空の変数を作っておくという使い方があります。

ちなみに先程PythonコンソールではNoneと何かを比較する場合、==を使いましたが、本当は==ではなくて、isというキーワードを使った方が良いとされています。

title is None 

Pythonではこのように書くことが推奨されています。Noneと何かを比較する場合、isを使うのが望ましいとされていますので、頭の片隅に置いておいていただければと思います。