検索

キーワード


目次

Pythonにおけるスコープと名前空間について【初心者向け解説記事】

  • 公開日:2023-07-23 20:22:46
  • 最終更新日:2023-07-23 20:36:59
Pythonにおけるスコープと名前空間について【初心者向け解説記事】

Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!

フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。

スコープ、名前空間とは?

スコープとは

プログラミングにおけるスコープとは、変数や関数の有効範囲、つまりそれらが参照可能な範囲のことを指します。このスコープにより、同じ名前の変数でも異なる場所で定義されると、その有効範囲が異なります。


名前空間とは

名前空間とは、名前(変数名や関数名)が一意に定まる範囲のことを指します。名前空間は互いに重複しないように分けられており、同じ名前でも異なる名前空間にある場合は別のものとして扱われます。

例えば、同じfunctionという名前の関数があったとして、クラスAの関数A.function()とクラスBの関数B.function()は異なる変数になります。

Pythonでは、名前空間を管理するためにモジュールという概念を導入しています。モジュールについては、Pythonのモジュールとパッケージで詳しく解説しています。


スコープと名前空間の違い

スコープと名前空間は密接な関連がありますが、それぞれ異なる概念であることを理解しましょう。スコープ変数が参照可能な範囲、名前空間名前が一意である範囲を表します。


Pythonにおけるスコープのルール

ローカルスコープ

関数内で定義された変数はローカルスコープを持つため、その変数は関数の内部でのみ参照可能です。これは、関数内部で使用する一時的な変数を定義する際に非常に有用で、同じ名前の変数が関数外で使用されていても、関数内部のローカル変数はそれとは独立しています。この性質により、変数名の衝突を避けることができます。以下に例を示します。

def func():
    x = 10  # ローカル変数
    print(x)  # 10を表示

x = 20  # グローバル変数
func()  # 関数を呼び出す
print(x)  # 20を表示

上記のコードでは、関数func内部の変数xと、その外部の変数xは別々のものとして扱われます。


グローバルスコープ

一方、関数外で定義された変数はグローバルスコープを持ち、プログラム全体から参照することが可能です。ただし、関数内からグローバル変数を直接変更することはできません。そのため、グローバル変数を変更する必要がある場合は、globalキーワードを使用します。以下に例を示します。

x = 20  # グローバル変数

def func():
    global x
    x = 30  # グローバル変数を変更
    print(x)  # 30を表示

func()  # 関数を呼び出す
print(x)  # 30を表示

上記のコードでは、globalキーワードにより、関数func内からグローバル変数xの値を変更できます。


ビルトインスコープ

Pythonに組み込まれている関数や変数は、ビルトインスコープを持ちます。これはPython全体からアクセスできる最大の範囲を持ちます。組み込み関数や組み込みクラスなどがこれに該当します。例えば、組み込み関数のlen()やprint()などはimportなどを行わなくてもどこからでも使用することができます。

組み込み関数については、Pythonにおける組み込み関数についてで詳しく解説しています。


グローバル変数とローカル変数の理解

グローバル変数の使用

グローバル変数は、関数外で定義され、プログラム全体からアクセス可能です。そのため、異なる関数やモジュール間でデータを共有する際に使用します。しかし、グローバル変数はどこからでも変更できるため、使用を制限し、必要な場所でのみ使用するように心がけることが重要です。


ローカル変数の使用

ローカル変数は、関数内で定義され、その関数内からのみアクセス可能です。これは関数の独立性を保つために重要で、関数が外部の状態に依存せず、同じ引数が与えられれば常に同じ結果を返すことが保証することが出来ます。これを関数の「純粋性」と呼びます。純粋な関数はテストやデバッグが容易で、再利用も可能です。


スコープルールの適用例

ここでは、グローバル変数とローカル変数の動作を確認するコード例を見てみましょう。

def func():
    local_var = "ローカル変数"
    print(local_var)

global_var = "グローバル変数"
print(global_var)

func()
print(local_var) # NameError: name 'local_var' is not defined


このコードを実行すると、「グローバル変数」「ローカル変数」と表示された後、「local_varが定義されていません」というエラーが表示されます。


まとめ

この記事では、Pythonにおけるスコープと名前空間について説明しました。これらの概念を理解することで、Pythonのコードがどのように動作するのかを理解しやすくなります。適切なスコープと名前空間の理解は、コードの読みやすさや保守性を向上させるためにも重要です。


【著者】

ゆうさい

フォワードソフト株式会社のエンジニア。Java、Python、JavaScript、C#などの言語の他、クラウドやネットワーク技術を勉強しています。PythonやVBAを使った自動化で楽をする方法を考えるのが好きです。 最近はジェネレーティブAIの業務利用に関する検証を行っています。 資格を通じて知識を吸収することを心がけており、セキュリティスペシャリスト、データベーススペシャリスト、応用情報技術者、Oracle Certified Java Programmer Gold SE 11、Pythin3 エンジニア認定試験、HTML5プロフェッショナル認定試験レベル2、AWSプラクティショナーなどの情報資格を保有しています。

編集した記事一覧

正社員/フリーランスの方でこのようなお悩みありませんか?

  • 自分に合う案件を定期的に紹介してもらいたい
  • 週2、リモートワークなど自由な働き方をしてみたい
  • 面倒な案件探し・契約周りは任せて仕事に集中したい

そのような方はぜひ、Workteriaサイトをご利用ください!

  • 定期的にご本人に合う高額案件を紹介

  • リモートワークなど自由な働き方ができる案件多数

  • 専属エージェントが契約や請求をトータルサポート