Python None とは何か ?

株式会社リュディアです。今回は None についてまとめてみたいと思います。

Python のプログラムを初めてしばらくの間は AttributeError: ‘NoneType’ object has no attribute ‘ というエラーメッセージに出会ったと思います。NoneNoneType 型の唯一の値です。

まず None の type を見てみましょう。

type(None)
>> NoneType

確かに NoneNoneType 型であることがわかりました。では、次の例をみてください。

a = 1
print(type(a), id(a))
a = None
print(type(a), id(a))

>> <class 'int'> 140712019371808
>> <class 'NoneType'> 140712019138688

a を整数 1 で初期化しているので最初の print文では a は int 型で、オブジェクト id は 140712019371808 です。次に a = None として print文を実行すると a は NoneType 型で、オブジェクト id は 140712019138688 となっています。当初の int 型という情報が失われて別 id になっていますね。

では、次にリスト型で同じことをやってみましょう。

l_a = ['Apple', 'Orange', 'Banana']
print(type(l_a), id(l_a))
l_a = None
print(type(l_a), id(l_a))

<class 'int'> 140712019371808
<class 'NoneType'> 140712019138688

こちらもリスト型という情報が失われています。結論として None を代入すると型を持たないラベルのみの状態になっていると推測されます。

次にあるオブジェクトが None であるかどうか判定することを考えます。以下の例を見てください。

a = None
if a == None:
   print('a is None')

if a is None:
   print('a is None')

>> a is None
>> a is None

== でも is でも None と判定されていますので問題無いですね。ただ PEP8 には以下のような記述があります。

None のようなシングルトンと比較をする場合は、常に is か is not を使うべきです。絶対に等値演算子を使わないでください。

そのようなわけで None を判定する場合は is を使うようにしましょう。

今回は None についてまとめてみました。

では、ごきげんよう。


この記事が気に入ったらサポートをしてみませんか?