Python
 Computer >> コンピューター >  >> プログラミング >> Python

【初心者向け】PythonのNone(ヌル)オブジェクトとは?基本から実例まで徹底解説

Pythonには、他のプログラミング言語でいう「null」に相当するオブジェクトは存在しません。しかし、それに最も近い存在としてNoneという特別なオブジェクトが用意されています。この記事では、PythonにおけるNoneの基本的な挙動について、実行例を交えながら詳しく解説します。

Noneの型を確認してみる

まず、Noneの型を確認しましょう。Pythonには「Null」という型や名前は存在せず、Noneオブジェクトの型はNoneTypeです。

print(type(None))
print(type(Null))

出力

<class 'NoneType'>
Traceback (most recent call last):
    File "C:\Users\xxx\scratch.py", line 4, in <module>
        print(type(Null))
NameError: name 'Null' is not defined

type(None)<class 'NoneType'>を返しますが、未定義の名前であるNullを参照した時点でNameErrorが発生します。これは、Pythonに「Null」という名前そのものが存在しないことを示しています。

Noneに関する重要なポイント

  • NoneはFalseとは等しくありません。ただし、if文などのブール値コンテキストでは偽(falsy)として評価されます。

  • Noneは空文字列や0とも等しくありません。これらも同様にブール値コンテキストでは偽と評価されますが、Noneとはまったく別のオブジェクトです。

  • Noneと他のオブジェクトを比較すると、常にFalseを返します。唯一の例外はNone自身との比較だけです。

  • Noneは単一のオブジェクトです。Pythonインタープリタ全体でNoneのインスタンスは1つしか存在せず、すべてのNone参照は同一のオブジェクトを指します。そのため、比較には==ではなくis演算子を使うことが推奨されています。

PythonにおけるNull変数の扱い

「未定義の変数」と「Null変数」は異なる概念なので注意が必要です。Pythonでは、変数にNoneを代入することで、その変数は「値を持たない(null的な)状態」になります。一方、一度も代入されていない変数を参照しようとするとエラーになります。

var_a = None
print('var_a is: ', var_a)
print(var_b)

出力

var_a is: None
Traceback (most recent call last):
    File "C:\Users\Pradeep\AppData\Roaming\JetBrains\PyCharmCE2020.3\scratches\scratch.py", line 5, in <module>
        print(var_b)
NameError: name 'var_b' is not defined

この例では、Noneを代入されたvar_aは問題なく「None」として表示されます。一方、一度も定義されていないvar_bを参照するとNameErrorが発生します。「値がないこと」と「変数自体が存在しないこと」の違いが、ここにはっきりと表れています。

Noneに対するメソッド呼び出しはできない

変数がNoneになると、リストなどが持つメソッド(要素の追加・削除など)を呼び出すことはできません。Noneには有効な属性やメソッドが一切存在しないためです。

listA = [5, 9, 3, 7]
listA.append(18)
print(listA)
listA = None
listA.append(34)
print(listA)

出力

[5, 9, 3, 7, 18]
Traceback (most recent call last):
    File "C:\Users\Pradeep\AppData\Roaming\JetBrains\PyCharmCE2020.3\scratches\scratch.py", line 7, in <module>
        listA.append(34)
AttributeError: 'NoneType' object has no attribute 'append'

最初は通常のリストとして動作していましたが、Noneを代入した後はappendメソッドが使えなくなり、AttributeErrorが発生します。このように、Noneは「何もない」ことを表すプレースホルダーであり、いかなる操作も受け付けません。

まとめ

PythonにおけるNoneは、他言語のnullに相当する特殊な値であり、型はNoneTypeです。Falseや空文字列、0とは等しくありませんが、ブール値コンテキストでは偽として扱われます。また、明示的なreturn文を持たない関数も自動的にNoneを返すため、戻り値のチェックにもis Noneを使う習慣をつけると、より安全で読みやすいコードを書けるようになります。

  1. Pythonデバッガー(pdb)の使い方を徹底解説!基本コマンドからブレークポイントまで

    Pythonデバッガー(pdb)とはソフトウェア開発の分野では、プログラム内のエラー(バグ)を発見し修正するプロセスを「デバッグ」と呼びます。Pythonの標準ライブラリにはpdbモジュールが含まれており、これはPythonプログラムをデバッグするための一連のユーティリティを提供します。デバッグ機能はPdbクラスとして定義されており、このモジュールは内部的にbdbおよびcmdモジュールを利用しています。コマンドラインからの起動方法pdbモジュールには非常に便利なコマンドラインインターフェースが用意されています。Pythonスクリプトの実行時に-mスイッチを使ってインポートすることで、デバッガー

  2. Pythonのオブジェクト指向プログラミングの基本概念をわかりやすく解説

    Pythonにおけるオブジェクト指向プログラミング(OOP)の概念Pythonはオブジェクト指向プログラミング言語です。クラスやオブジェクトを簡単に作成し、自由に利用することができます。Pythonの主要なオブジェクト指向の概念は以下の7つです。オブジェクト(Object)クラス(Class)メソッド(Method)継承(Inheritance)ポリモーフィズム(Polymorphism/多態性)データ抽象化(Data Abstraction)カプセル化(Encapsulation)オブジェクト(Object)オブジェクトとは、状態と振る舞いを持つ実体のことです。物理的なものでも論理的なもので