Pythonの変数スコープとは?ローカル変数とグローバル変数の違い
生徒
「先生、Pythonで変数を使っていると、うまく動かないときがあります。なんでですか?」
先生
「それは『スコープ』という考え方が関係しているかもしれません。変数には、使える範囲があるんですよ。」
生徒
「スコープってなんですか?難しそう…」
先生
「安心して、簡単に説明するね。ローカル変数とグローバル変数の違いを知るだけで、スッキリ理解できるよ。」
1. 変数のスコープとは?
Pythonの変数には「スコープ(scope)」と呼ばれる使える範囲があります。簡単にいうと、その変数が「どこから見えるか」「どこで使えるか」を決めるルールです。
スコープには主に2つの種類があります。それが、ローカル変数(local)とグローバル変数(global)です。
2. ローカル変数とは?
ローカル変数とは、関数の中で使われる変数のことです。その関数の中だけで使えるようになっています。
例えば、次のようなコードを見てみましょう。
def greet():
name = "たろう"
print("こんにちは、" + name + "さん")
この例では、変数nameは関数greet()の中だけで使えます。関数の外からはnameを使うことはできません。
3. グローバル変数とは?
グローバル変数は、関数の外で作られた変数です。プログラム全体で使うことができます。
message = "おはよう"
def show_message():
print(message)
show_message()
このコードではmessageは関数の外で作られているので、どの関数の中からでもアクセスできます。これがグローバル変数です。
4. なぜスコープが重要なの?
スコープを理解することはとても大切です。なぜなら、プログラムを作っていくうちに、同じ名前の変数が複数出てくることがあるからです。
もし変数がどこでも使えると、思わぬところで値が変わってしまったり、バグ(不具合)が起きたりしてしまいます。
スコープをしっかり理解しておくと、「この変数はここだけで使える」とわかるので、安全でわかりやすいプログラムが書けます。
5. ローカル変数とグローバル変数がぶつかったら?
同じ名前の変数がローカルとグローバルで使われていた場合、Pythonはローカル変数を優先します。
message = "こんにちは" # グローバル変数
def show():
message = "こんばんは" # ローカル変数
print(message)
show()
こんばんは
このように、関数の中で同じ名前の変数を使うと、外側のグローバル変数は無視されてしまいます。
6. グローバル変数を関数の中で使いたいとき
関数の中でグローバル変数を変更したい場合には、globalというキーワードを使います。
count = 0
def add():
global count
count = count + 1
add()
print(count)
1
globalと書くことで、「この変数はグローバルだよ」とPythonに教えることができます。ただし、使いすぎるとプログラムが複雑になるので注意しましょう。
7. スコープを理解してエラーを防ごう
スコープを正しく理解していないと、「変数が定義されていません」などのエラーに出会うことがあります。
def test():
name = "さくら"
print(name)
NameError: name 'name' is not defined
これは、変数nameが関数の中だけで使えるローカル変数だからです。関数の外では使えません。
8. スコープは箱のようなもの
スコープは「箱(はこ)」のようなものと考えるとイメージしやすいです。ローカル変数は小さな箱の中だけで使えるメモです。グローバル変数は、大きな箱の中に入っていて、みんなが見える場所にあるメモです。
変数が見える場所を意識するだけで、Pythonのコードはずっとわかりやすくなります。
9. どちらを使えばいいの?
基本的には、ローカル変数を使うのがおすすめです。ローカル変数は関数の中で完結しているため、他の場所に影響を与えにくいです。
グローバル変数は、どうしても関数の外とつながる必要があるときにだけ使うようにしましょう。
まとめ
変数スコープの基本を振り返ろう
今回の記事では、Pythonにおける変数スコープの考え方について、ローカル変数とグローバル変数を中心に丁寧に確認してきました。 変数スコープとは、変数がどの範囲で使えるのかを決める重要なルールです。 プログラミング初心者が最初につまずきやすいポイントでもあり、Pythonの基礎理解には欠かせない知識といえます。
ローカル変数は関数の中だけで使える変数であり、関数の外からは見えません。 そのため、処理のまとまりごとに安全に値を管理でき、思わぬバグを防ぐことができます。 一方で、グローバル変数はプログラム全体から参照できる便利な存在ですが、使い方を誤ると処理の流れが追いづらくなり、エラーの原因にもなります。
ローカル変数を使うメリット
ローカル変数を使う最大のメリットは、影響範囲が限定されている点です。 関数の中だけで完結するため、他の処理と変数がぶつかる心配がありません。 Pythonのプログラムでは、関数を組み合わせて処理を作ることが多いため、ローカル変数を意識するだけでコード全体の見通しが良くなります。
特に初心者のうちは、グローバル変数を多用せず、必要な値は引数として関数に渡し、結果を戻り値として受け取る書き方を心がけると理解が深まります。 これはPythonだけでなく、他のプログラミング言語でも役立つ考え方です。
グローバル変数を使うときの注意点
グローバル変数は、設定値や共通データを扱うときに便利ですが、数が増えるほど管理が難しくなります。 関数の中で値を書き換えてしまうと、どこで変数が変化したのか分かりにくくなります。 そのため、Pythonでは必要最低限にとどめることが大切です。
また、globalキーワードを使うときは、「本当にこの変数はグローバルである必要があるか」を一度立ち止まって考える癖をつけると、より読みやすいコードになります。
スコープを意識したサンプルプログラム
total = 0
def add_score(score):
local_total = score
return local_total
total = add_score(10)
print(total)
この例では、関数の中でローカル変数を使い、必要な結果だけを戻り値として返しています。 グローバル変数を直接書き換えずに処理することで、動作が分かりやすくなり、保守もしやすくなります。 スコープを意識した書き方は、Pythonの基礎文法を理解するうえで非常に重要です。
エラー防止と読みやすさにつながる考え方
変数スコープを理解していないと、定義されていない変数を使ってしまい、エラーが発生します。 しかし、どの変数がどこで使えるのかを常に意識していれば、こうしたミスは自然と減っていきます。 Pythonのエラーメッセージを見たときも、「この変数はどのスコープにあるのか」と考えることで、原因を素早く見つけられるようになります。
生徒「まとめてみると、変数が使える場所をちゃんと意識することが大切なんですね。」
先生「そうですね。スコープを理解すると、Pythonのコードが急に読みやすくなりますよ。」
生徒「ローカル変数を使えば、他の処理に影響しにくいのも分かりました。」
先生「その通りです。まずはローカル変数を基本にして、必要な場面だけグローバル変数を使うと良いですね。」
生徒「エラーが出たときも、スコープを考えると原因が見つけやすそうです。」
先生「ええ。変数スコープはPythonの基礎ですが、長く使える大事な考え方です。」