Python 名前空間

はじめに

皆さんこんにちはALEXです。今回は名前空間について解説します。pythonには名前空間と呼ばれる空間(といってもコードの中での)が存在あります。空間ごとに範囲が定められています。具体的に言うと、ある関数の中で定義された変数は、他に定義された変数、それが同じ名前であったとしても、それぞれは別物として扱われ、それぞれの関数の中で参照されます。 といっても、全くお互いに参照できないということでではありません。その範囲であるスコープとうものを操作して参照することが可能です。具体例を見ていきましょう。

グローバル名前空間、グローバル変数

コードを書く際に、まず変数を定義してその次にその変数を定義する、こういったパターンがあるかと思います。この時の空間はグローバル名前空間として定義されます。そしてそこで定義した変数はグローバル変数として定義されます。 以下のようなコードを書いてみましょう。

以下のように表示されます。

 

ここで定義した変数glはグローバル空間で定義されたグローバル変数です。この変数は、関数の中から扱うことができます。 次に関数定義したコードを、以下の通り書き換えます。グローバル変数として宣言したglを関数gl_name()の中で書きかえてみます。

すると以下のような例外表示があらわれます。

 

変数の値を書きかえて関数内のローカル変数として定義しているため、実行時にこの変数を指定する前に、この変数が参照されているという例外表示がされています。一度グローバル空間で定義された変数を、異なる空間であるローカル関数空間で参照はできないですよ、ということですね。 では、どのようにすればローカル空間から、グローバル空間で定義された変数を参照できるでしょうか?以下のようにコードを書きかえてみましょう。

以下のように表示されます。

違いが判りますか?そうです例外が出たコードでは print(gl)が関数の中にありま。後者はローカル関数の外にあります。次に、ローカル空間の中でglを書きかえる方法をご紹介します。

ローカル関数内でグローバル変数を書きかえる

最初に定義したグローバル変数をローカルの関数内から書き換えるにはglobalキーワードを使います。 以下のように記述します。

以下のように表示されます。

 

詳しく説明します。まずグローバル変数glを定義します。 次に、ローカル空間に関数 gl_name()を定義します。 次の行がポイントでglobal gl とし、ローカル空間内で関数内にglobalと置いた後に変数を置きます。 print文で書き換えた変数を表示します。 関数の外で、まずグローバル変数を出力します。ここではグローバルのままです。 次に関数を実行するので、グローバル変数はローカル空間の中で書き換えらえました。 最後に書きかえられた変数が出力されます。  

まとめ

Pythonの名前空間について解説しました。Pythonにはグローバル名前空間とローカル名前空間が存在します。別の空間で定義した変数は同じ名前でも別の変数を参照しています。 関数で定義した変数はローカルの名前空間でローカル変数として参照されます。グローバル変数は、関数からも参照できます。 関数内でグローバル変数を取得し、値を書き換えることはできません。そのような操作をする場合は、globalキーワードを使用します。

 

クラスメソッド

グローバル変数とローカル変数の使い方

連載目次

初心者にもわかるオブジェクト指向

クラス

継承

ポリモーフィズム

インスタンス変数の隠ぺい

オーバーライドと多重継承

クラスメソッド

名前空間

グローバル変数とローカル変数の使い方

クラス変数にメソッドからアクセスする場合

カプセル化、プロパティ、ゲッター、セッターについての解説