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. どちらを使えばいいの?
基本的には、ローカル変数を使うのがおすすめです。ローカル変数は関数の中で完結しているため、他の場所に影響を与えにくいです。
グローバル変数は、どうしても関数の外とつながる必要があるときにだけ使うようにしましょう。