Pythonを学んでいると、「変数が使えない」「どこで定義したかわからなくなった」といった悩みにぶつかることがあります。
この記事では、初心者がつまずきやすい「スコープ(変数の有効範囲)」について、ChatGPTやGoogle Colabを使いながら学べるように、わかりやすく解説します。
▶ 前回の記事はこちら:
👉 ChatGPTで学ぶPython関数の引数応用入門
スコープとは?意味を簡単に理解しよう
スコープとは、「その変数が使える範囲」のことです。
Pythonでは、どこで変数を作ったかによって、どこで使えるかが決まります。これを知らないと、以下のようなエラーに出会うことがあります。
print(x) # NameError: name 'x' is not defined
これは「x
が定義されていない=スコープの外にある」という意味です。
ローカル変数とグローバル変数の違い
Pythonのスコープには、主に2つの種類があります。
ローカル変数
ローカル変数は、関数の中でだけ使える変数のことです。
関数の外からは見えません(使えません)。
def greet():
name = "たろう" # ← ローカル変数
print("こんにちは、" + name + "さん")
greet()
print(name) # → エラー!nameは関数の外では使えない
name
は関数の中だけの存在です。
グローバル変数
グローバル変数は、関数の外で作った変数のことです。
関数の中でも「読む」ことができます。
name = "さくら" # ← グローバル変数
def greet():
print("こんにちは、" + name + "さん") # → OK!
greet()
- 関数の中でグローバル変数を書き換えたいときは注意が必要です。
スコープに関する具体的なコード例
Google Colab で試せる「スコープ(変数の有効範囲)」に関するコード例を紹介します。
例:ローカル変数は関数の中だけで使える
def show_name():
name = "たろう" # ローカル変数
print("こんにちは、" + name + "さん")
show_name()
# 関数の外で使おうとするとエラー
print(name) # NameError: name 'name' is not defined
例:グローバル変数は関数の中でも読める
age = 25 # グローバル変数
def show_age():
print("年齢は", age, "歳です") # グローバル変数を参照
show_age() # OK
例:関数内でグローバル変数を書き換える(global)
count = 0
def increment():
global count # グローバル変数を使う宣言
count += 1
increment()
print(count) # 出力: 1
global
を使わずに書き換えようとすると、エラーになります。
グローバル変数を「読み込むだけ」ならOKですが、「書き換え」は global
が必要です。
count = 0
def wrong_increment():
count += 1 # UnboundLocalError
wrong_increment()
例:同じ変数名でもローカルとグローバルで別物
Pythonでは、同じ変数名でもスコープによって意味が変わるため、正しく理解しましょう。
コード例
x = 100 # グローバル変数
def change():
x = 50 # ローカル変数(別物)
print("関数内のx:", x)
change()
print("関数外のx:", x)
実行結果
関数内のx: 50
関数外のx: 100
同じ「x」でも、関数の中と外では別の変数として扱われています。
これがスコープの基本的な考え方です。
ChatGPTでスコープを理解する方法
ChatGPTは、スコープに関する疑問を丁寧に答えてくれるパートナーです。
🔸 質問の例:
- 「この変数が使えないのはなぜ?」
- 「グローバルとローカルの違いを教えて」
- 「このエラーの原因はスコープの問題ですか?」
Colabで試したコードがうまく動かないときは、エラーとコードをそのままコピーしてChatGPTに貼ると、すぐに原因がわかることも多いです。
よくあるエラーと対処法まとめ
エラー | 原因 | 対処法 |
---|---|---|
NameError | 変数がスコープ外 | 定義場所を見直す |
UnboundLocalError | 関数内でグローバル変数を上書きしようとした | global を使う、または別名を使う |
値が変わらない | 関数の中で別の変数として扱われている | 変数名の重複に注意 |
まとめ|スコープを理解すれば関数がもっと使いやすくなる
- スコープとは「変数の使えるエリア」のことです
- ローカル変数は関数の中、グローバル変数は外で定義します
global
を使えば、関数内から外の変数を書き換えられます- ChatGPTを活用すれば、原因不明のエラーにもすぐ対応できます
関数を使いこなすには、スコープの理解が欠かせません。Colabで試しながら、ぜひ少しずつ身につけていきましょう!
次回は、「Pythonのクラスとオブジェクト」について解説していきます。お楽しみに!