カテゴリ: Python 更新日: 2025/06/12

Pythonの変数のスコープとは?ローカル変数とグローバル変数の違いを初心者向けに解説

Pythonの変数のスコープとは?ローカル変数とグローバル変数の違い
Pythonの変数のスコープとは?ローカル変数とグローバル変数の違い

先生と生徒の会話形式で理解しよう

生徒

「先生、Pythonで変数のスコープって何ですか?ローカル変数とかグローバル変数って聞きます」

先生

「スコープは『変数が使える範囲』のことです。ローカル変数は関数の中だけ、グローバル変数はプログラム全体で使える変数ですよ」

生徒

「それぞれどう使い分けるんですか?注意点とかありますか?」

先生

「それは大事な点ですね。まずはローカルとグローバルの違いをわかりやすい例で見ていきましょう!」

-

1. 変数のスコープとは?

1. 変数のスコープとは?
1. 変数のスコープとは?

「スコープ」とは、変数が「使える範囲」のことです。プログラムでは、変数をどこで作るかによってローカル変数グローバル変数に分かれ、それぞれに「見える範囲(スコープ)」があります。

大きな町内会で「この町内だけ使える名前」と「町全体で使える名前」があるイメージです。

2. ローカル変数とは?

2. ローカル変数とは?
2. ローカル変数とは?

ローカル変数は、関数(またはブロックなど)の中でだけ使える変数です。関数を出ると消えてしまう、例えると「部屋の中だけで使えるメモ」です。


def greet():
    message = "こんにちは"  # ローカル変数
    print(message)

greet()
print(message)  # ここではエラーになる

実行すると、関数内では「こんにちは」が表示されますが、関数外では使えずエラーになります。


こんにちは
Traceback (most recent call last):
  File "<stdin>", line 5, in <module>
NameError: name 'message' is not defined

3. グローバル変数とは?

3. グローバル変数とは?
3. グローバル変数とは?

グローバル変数は、プログラム全体で使える変数です。どの関数からでもアクセスできる「町全体で使える大きな看板」のようなものです。


greeting = "おはよう"  # グローバル変数

def say():
    print(greeting)

say()
print(greeting)

実行すると、関数内外どちらでも「おはよう」が表示されます。


おはよう
おはよう

4. グローバル変数を関数内で変更したいとき

4. グローバル変数を関数内で変更したいとき
4. グローバル変数を関数内で変更したいとき

関数内でグローバル変数を変更したい場合は、globalキーワードを使います。これは「この関数はこの変数を外から使ってね」と宣言する感じです。


count = 0

def increment():
    global count
    count += 1

increment()
increment()
print(count)  # 2になります

globalを使わないと、関数内で新しいローカル変数が作られてしまい、混乱する原因になります。

-

5. スコープと名前解決のルール(LEGBルール)

5. スコープと名前解決のルール(LEGBルール)
5. スコープと名前解決のルール(LEGBルール)

PythonにはLEGBという「名前を探す順番」の決まりがあります:

  • Local(ローカル)— 関数内
  • Enclosing(ネストされた関数の外側)
  • Global(グローバル)— モジュール全体
  • Built‑in(ビルトイン)— Pythonが初めから持っている

この順番で名前を探し、最初に見つかった場所の変数を使います。だから、同じ名前でも場所によって意味が変わることがあります。

6. 実際の例:名前の衝突に注意!

6. 実際の例:名前の衝突に注意!
6. 実際の例:名前の衝突に注意!

例えば、グローバルにx、そして関数内にもxがあるとどうなるか見てみましょう。


x = "グローバル"

def f():
    x = "ローカル"
    print(x)

f()
print(x)

出力は「ローカル」「グローバル」です。それぞれ別物として扱われています。


ローカル
グローバル

これがスコープの重要なポイントです。同じ名前でも別々の意味を持てるため、使い分けが必要です。

7. スコープの活用でプログラムをスッキリさせよう

7. スコープの活用でプログラムをスッキリさせよう
7. スコープの活用でプログラムをスッキリさせよう

スコープを理解すると、不要なグローバル変数を減らして安全にコードが書けます。ローカル変数を使えば、他の部分に影響を与えずに済むため、バグが減って読みやすくなります。

例えば、設定値や状態をグローバルに保管しすぎると、予想外の動きになることがあります。スコープを分けて考えることで「この変数はここだけ使う」と明確にできます。

8. ネスト(入れ子)とスコープ

8. ネスト(入れ子)とスコープ
8. ネスト(入れ子)とスコープ

関数の中にさらに関数を作ると、外側の関数の変数を使うケースがあります。このときもスコープが重要です。


def outer():
    msg = "外のメッセージ"
    def inner():
        print(msg)  # enclosingスコープのmsgを使う
    inner()

outer()

この例では、inner関数がouterのmsgを使えます。これは「ネストされた関数の外側」がスコープに含まれているため可能です。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
Pythonで複数の条件を組み合わせる方法!and・or・notの使い方
Pythonの例外処理(try-except)の基本と応用!エラーハンドリング完全ガイド
Pythonの三項演算子とは?一行で条件分岐を記述する方法
Pythonのmatch文(パターンマッチング)の使い方!switch文の代替
人気記事
No.1
Java&Spring記事人気No1
PHP のセッションの有効期限を設定する方法(session_set_cookie_params)
No.2
Java&Spring記事人気No2
PHP の関数のスコープを完全解説!ローカル変数とグローバル変数の違いとは?
No.3
Java&Spring記事人気No3
PHPの関数(function)の基本を完全ガイド!初心者でもわかる使い方
No.4
Java&Spring記事人気No4
PHP で JSON ファイルを読み書きする方法(json_encode, json_decode)初心者向けガイド!
-