Pythonの変数スコープとは?初心者でもわかるローカル変数とグローバル変数の違い
生徒
「Pythonで変数を作ったのに、別の場所で使えなかったんです。どうしてですか?」
先生
「それは『スコープ』の問題かもしれないね。スコープとは、変数が使える範囲のことなんだ。」
生徒
「スコープって、難しそう…。プログラミングもパソコンも初めてなので、わかるか不安です。」
先生
「大丈夫。スコープは日常のたとえで説明するととてもわかりやすいから、一緒にゆっくり学んでいこう!」
1. Pythonの変数とスコープとは?
Python(パイソン)では、変数とは「情報を入れておく名前のついた箱」のようなものです。
たとえば、name = "さくら"
と書くと、「name」という名前の箱に「さくら」という情報が入ります。
でも、この変数がどこからでも使えるとは限りません。変数が使える範囲を「スコープ」と呼びます。
たとえば、学校のロッカーは、その学校の生徒だけが使えるように、Pythonでも変数によって「使える場所」が決まっています。
2. ローカル変数とは?関数の中だけで使える変数
ローカル変数(local variable)は、関数の中で作られた変数で、その関数の中でしか使えません。
たとえば、家の中だけで使えるテレビのリモコンのように、外では使えないというイメージです。
def greet():
name = "たかし"
print("こんにちは、" + name)
greet()
print(name) # ここではエラーになります
こんにちは、たかし
NameError: name 'name' is not defined
このように、name
という変数は関数の中でしか使えません。関数の外で使おうとすると、Pythonは「そんな変数は知らないよ」と言ってエラーになります。
3. グローバル変数とは?どこからでも使える変数
グローバル変数(global variable)は、関数の外で作られた変数です。これはプログラムのどこからでも使えます。
たとえるなら、教室の黒板に書いたメモのようなもので、誰でも見たり使ったりできます。
school = "サクラ小学校"
def show_school():
print("通っている学校は" + school + "です")
show_school()
通っている学校はサクラ小学校です
このように、school
という変数は関数の外で作られたので、関数の中からでも見ることができます。
4. グローバル変数を関数の中で書き換えるには?
関数の中でグローバル変数の中身を変えたいときは、global
という特別な言葉を使います。
counter = 0
def add_one():
global counter
counter = counter + 1
add_one()
print(counter)
1
global counter
と書くことで、「このcounter
は外にある変数ですよ」とPythonに伝えることができます。
これを忘れると、Pythonは「これは関数の中で新しく作られたローカル変数だ」と思い込んでしまい、エラーになります。
5. なぜスコープを理解することが大切なの?
スコープを知らずにプログラムを書くと、「思ったとおりに動かない」「エラーになる」といったトラブルが起こります。
たとえば、こんな例です。
total = 50
def update_total():
total = total + 10
update_total()
UnboundLocalError: local variable 'total' referenced before assignment
このエラーは、「関数の中でtotal
を使おうとしたけど、ローカル変数として見つからなかった」という意味です。
このようなときはglobal
を使って、外の変数を使うことを明示すれば解決できます。
6. ローカル変数とグローバル変数の違いを身近なたとえで理解しよう
ローカル変数は、家の中だけで使うもの(たとえばリモコンやおもちゃ)です。
グローバル変数は、みんなで使えるもの(たとえば学校の黒板やチャイム)です。
このように、「どこで使えるのか?」を意識するだけで、プログラムのエラーを減らすことができます。
スコープは、プログラミングをするときの「交通ルール」のようなものです。しっかり覚えて、安全に楽しくPythonを使いましょう!