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

Pythonの名前空間(namespace)とは?仕組みとスコープの関係をわかりやすく解説

Pythonにおける名前空間とは

名前空間(namespace)は、変数名の「スコープ」を実現するための仕組みです。Pythonでは、パッケージ、モジュール、クラス、関数、メソッドといったそれぞれの単位が固有の名前空間を持ち、その中で変数名が解決されます。

名前空間の生成と破棄

関数やモジュール、パッケージが評価されて実行を開始すると、それに対応する新しい名前空間が生成されます。これは一種の「評価コンテキスト」と考えると理解しやすいでしょう。そして、関数などの実行が終了すると、その名前空間は破棄され、そこに含まれていた変数も一緒に消えます。

名前の検索順序

変数名は、まずローカルな名前空間(関数の本体やモジュール内など)で検索され、そこで見つからなければグローバルな名前空間へと探索が移ります。より正確には、PythonはLEGB(Local → Enclosing → Global → Built-in)の順序で名前を探します。

ローカル以外の名前空間への変数作成

通常、変数はローカルな名前空間にのみ作成されます。しかし、global文やnonlocal文を使用することで、ローカル以外の名前空間に変数を作成・更新することも可能です。

コード例

x = "global"

def func():
    x = "local"   # ローカル名前空間に新しく作成される
    print(x)

func()            # 出力: local
print(x)          # 出力: global

このように、同じ名前でも属する名前空間が異なれば別々の変数として扱われます。名前空間の仕組みを理解することで、変数の衝突や意図しない値の書き換えを防ぎ、より安全で読みやすいコードを書けるようになります。

  1. C#の名前空間(namespace)とは?定義方法と基本的な使い方を解説

    名前空間とは名前空間(namespace)とは、ある一連の名前を別の一連の名前から分離して管理するための仕組みです。大規模なプロジェクトでは、複数の開発者が同じ名前のクラスやメソッドを作成することがあり、名前の衝突(コンフリクト)が発生する可能性があります。名前空間を使うことで、こうした衝突を防ぎ、コードを論理的に整理できます。また、.NET Framework が提供する System なども名前空間の一つであり、標準ライブラリの機能はすべて名前空間によって分類・管理されています。名前空間の定義方法名前空間の定義は、namespace キーワードで始まり、その後に名前空間名を続けて記述します

  2. Pythonの名前空間とスコープの仕組みをわかりやすく解説

    Pythonでは、変数・関数・ライブラリ・モジュールなど、さまざまな「名前」を扱います。ところが、使おうとした変数名が、すでに別の変数や関数、メソッドの名前として存在している――そんな場面に遭遇することは珍しくありません。このような名前の衝突を避けるためにも、Pythonがこれらの名前をどのように管理しているのかを理解しておく必要があります。その鍵となるのが「名前空間(namespace)」という概念です。 名前空間の3つの種類 Pythonの名前空間は、大きく次の3つに分類されます。 ローカル名前空間(Local Namespace)関数の中で定義された変数や関数の名前を保持する名前空