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

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

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

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

生徒

「Pythonで同じ変数名を使ったら、場所によって値が違うときがあるんですが、これはどうしてですか?」

先生

「それは『スコープ』が関係しています。スコープとは変数が有効な範囲のことです。」

生徒

「スコープ?有効な範囲ってどういう意味ですか?」

先生

「変数は宣言された場所によって使える範囲が決まります。関数の中だけで使える変数もあれば、プログラム全体で使える変数もあります。」

生徒

「それがローカル変数とグローバル変数の違いですか?」

先生

「そうです。では具体的に見ていきましょう。」

-

1. スコープとは?

1. スコープとは?
1. スコープとは?

スコープとは、変数や関数が参照できる範囲を意味します。Pythonでは、変数のスコープは大きく分けて次の2種類があります。

  • ローカル変数:関数やメソッドの中だけで有効な変数
  • グローバル変数:プログラム全体からアクセスできる変数

この他に、関数の外と内の中間的なスコープ(非ローカル変数)もありますが、基本的な理解はローカルとグローバルで十分です。

2. ローカル変数の例

2. ローカル変数の例
2. ローカル変数の例

ローカル変数は関数の中で定義され、その関数の中でしか使えません。


def sample():
    message = "関数内のメッセージ"
    print(message)

sample()
print(message)  # これはエラーになります

関数内のメッセージ
NameError: name 'message' is not defined

このように、関数の外からローカル変数にアクセスするとエラーになります。

3. グローバル変数の例

3. グローバル変数の例
3. グローバル変数の例

グローバル変数は関数の外で定義され、プログラム全体からアクセスできます。


message = "プログラム全体で使えるメッセージ"

def sample():
    print(message)  # グローバル変数にアクセス

sample()
print(message)  # ここでも使える

プログラム全体で使えるメッセージ
プログラム全体で使えるメッセージ

4. 関数内でグローバル変数を変更する場合

4. 関数内でグローバル変数を変更する場合
4. 関数内でグローバル変数を変更する場合

関数の中でグローバル変数を変更するには、globalキーワードを使います。


count = 0

def add_count():
    global count
    count += 1

add_count()
print(count)

1

ただし、グローバル変数を多用するとコードの可読性が下がり、バグの原因になるため注意が必要です。

-

5. ローカルとグローバルが同じ名前のとき

5. ローカルとグローバルが同じ名前のとき
5. ローカルとグローバルが同じ名前のとき

関数内で同じ名前の変数を作ると、それはローカル変数として扱われ、グローバル変数とは別物になります。


value = 100  # グローバル変数

def sample():
    value = 50  # ローカル変数
    print("関数内:", value)

sample()
print("関数外:", value)

関数内: 50
関数外: 100

6. スコープの使い分けのポイント

6. スコープの使い分けのポイント
6. スコープの使い分けのポイント
  • 変数はできるだけローカル変数として定義する
  • グローバル変数は設定値や定数など必要最低限にする
  • 変数名が衝突しないように名前付けに注意する

スコープを正しく理解すると、予期せぬ値の上書きやバグを防ぎ、読みやすいコードを書けるようになります。

まとめ

まとめ
まとめ

Pythonのスコープについて深く理解するためには、ローカル変数とグローバル変数の特徴を丁寧に比較しながら、関数内部と外部での変数の扱われ方を明確に意識することが大切です。特に、同じ変数名であっても宣言場所によって意味が変わるという点は、初心者にとって混乱しやすい部分であり、しっかりと整理しておく必要があります。ローカルスコープは関数内だけで完結し、他の場所に影響を与えないため安全に利用できる一方、グローバルスコープはプログラム全体から参照されるため、便利である反面管理を誤ると予期しない動作につながります。こうした特徴を踏まえながら、適切にスコープを選び分けることがPythonのプログラムを安定させ、読みやすくする重要な技術となります。 また、スコープに関する実例として示した関数内での変数変更やglobalキーワードの使いどころは実務でも頻繁に登場するため、今回の理解を土台として積極的に活用していくと、より高度なPythonプログラミングにも応用が可能になります。とくに名前衝突を避ける工夫や、最小限のグローバル変数運用といった設計の考え方は、規模の大きなシステム開発やチーム開発において欠かせない視点となります。スコープは単なる文法知識ではなく、プログラムの構造そのものを左右する根幹の仕組みであるため、しっかり意識して習得すれば、より柔軟で堅牢なコードを書く力が身につきます。

スコープのポイントを整理したサンプルプログラム

        
message = "外側のメッセージ"

def show_message():
    message = "内側だけで使われるローカルメッセージ"
    print("関数内の表示:", message)

def update_message():
    global message
    message = "更新されたグローバルメッセージ"

show_message()
print("関数外の表示:", message)

update_message()
print("変更後の関数外表示:", message)
        
    

このサンプルでは、ローカル変数とグローバル変数の動作の違いを確認でき、スコープの理解を深めるうえで非常に有効です。関数内で変数名が同じでも、外部とは別の値を保持することや、globalキーワードを使うと外側の値を書き換えられることが明確に示されています。スコープの振る舞いを意識しながらコードを読むことで、変数の管理が整理され、プログラム全体の見通しがよくなります。

先生と生徒の振り返り会話

生徒

「今日の内容で、ローカル変数とグローバル変数の違いがかなり理解できました。特に関数の中と外で同じ名前を使っても別のものになる点が印象に残りました。」

先生

「その理解はとても大事ですね。名前が同じでも場所が違えばまったく別の値として扱われるという仕組みは、Pythonだけでなく多くのプログラミング言語に共通する考え方です。」

生徒

「globalを使うと外側の値を書き換えられる仕組みも面白かったです。でも使いすぎると混乱のもとになると感じました。」

先生

「その通り。グローバル変数は便利だけれど、管理が難しいので慎重に使う必要があります。基本はローカル変数中心で、どうしても必要な場面だけグローバルにするという考えが良いですよ。」

生徒

「はい、これからはスコープを意識しながらコードを書いてみます!」

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

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

カテゴリの一覧へ
新着記事
New1
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
New2
PHP
PHPのスコープとは?グローバル・ローカル・スーパーグローバルを完全解説!
New3
PHP
PHPの演算子をやさしく解説!算術・比較・論理・ビット演算子の使い方
New4
PHP
PHP の変数とは?基本的な使い方とデータ型を徹底解説!
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonで辞書のキー・値・アイテムを取得する方法(keys(), values())
No.2
Java&Spring記事人気No2
Python
Pythonで辞書のネスト構造(入れ子辞書)を扱う方法 初心者向け完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.4
Java&Spring記事人気No4
Python
PythonでMySQLに接続する方法を完全解説!初心者でもわかるpymysqlの基本
No.5
Java&Spring記事人気No5
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.6
Java&Spring記事人気No6
PHP
PHPで画像ファイルをアップロードする方法を初心者向けに徹底解説!わかりやすい画像処理入門
No.7
Java&Spring記事人気No7
PHP
PHP の日付と時間の取得(date, time, strtotime)を完全解説!初心者でもわかる使い方
No.8
Java&Spring記事人気No8
PHP
PHP のデータ型を完全ガイド!初心者でもわかる int, string, float, bool など
-
-