変数の「スコープ」(有効範囲)
関数を作り始めると、必ずぶつかる壁があります。それが「変数のスコープ」です。
関数の中と外では、見えない壁(縄張り)があり、変数はお互いに干渉しないようになっています。
1. ローカル変数とグローバル変数
関数の中で新しく作った変数は、その関数の中でしか使えません。これをローカル変数と呼びます。
逆に関数の外で(スクリプトの最初に)作った変数は、プログラム全体から見えるグローバル変数と呼ばれます。
🚨 よくあるエラー:関数の外で使おうとする
関数の「中」で作った secret は、関数の「外」からは見えないので、print() しようとするとエラー(NameError)になります。
scope_error.py
Loading...
2. 同じ名前の変数を作ったら?
もし、関数の外と中で「同じ名前の変数」を作ったらどうなるでしょうか?
shadowing.py
Loading...
「中の世界」と「外の世界」では縄張りが違うので、同じ message という名前を使っても、関数の外の変数は上書きされません。
安全にプログラムが「別々の独立したもの」として動くようになっているのです。
3. 無理やり外のものを取り込む (global)
「関数の中」から「関数の外の変数」の数値を変更したり、文字列を上書きしたいときは、どうすればいいでしょうか?
そういう時は、global(グローバル)キーワードを使って、「今から外の変数を使いますよ!」と宣言します。
global_test.py
Loading...
ただし、global を使いすぎると、「いつ誰がこの変数を書き換えたのか分からなくなる」原因になるため、プロフェッショナルなプログラマーはなるべく使わず、先ほど学んだ return を代わりに活用します。
🎯 練習問題:スコープクイズ!
変数 x の値は、最後に何になっているでしょうか?
頭のなかで予想してから、「実行(Run)」ボタンを押して確かめてみましょう!
もし x の値を 50 に変更したい場合は、どうコードを直せばいいかも考えてみてください(global の使い所です)
scope_quiz.py
Loading...