変数のスコープ

関数で変数を使用するときに、注意が必要です。

その注意点について学んでいきます。

スライドの学習内容

  • ・スコープとは

Pythonでプログラムを確認しながら、スコープについて学んでいきましょう。

このスライド学習では、Google CorabでPythonのプログラムを打つことがあります。

Google Colabへは、次のリンクをクリックして移動しましょう。

スコープとは

プログラムで変数はどこでも作れますが、その変数が使用できる範囲が決まっています。

その範囲をスコープと言います。

以下のプログラムを実行して、スコープについて確認してみましょう。

def function1():
  x = 10 # 10を代入
  print("関数function1の変数x:",x)

x = 20 # 20を代入
function1()
print("変数x:",x)

実行結果

関数function1の変数x: 10
変数x: 20

これは1〜3行目が関数の定義だから、プログラムは5行目から始まりますね。

5行目で変数xに20を代入してるね。

その後、関数function1の中で、xに20を代入しているね。

その直後に、xの内容を表示している。

でも、その後、関数を抜けてから表示されるxの値が変わっているよ。

なんでだ!?

よく気づきましたね。実は、このプログラムには変数xは二つあるんです。

ローカル変数と、グローバル変数の違いです。

2. ローカル変数とグローバル変数

ローカル変数とグローバル変数?

いったいなんなんだろう?

ローカル変数とは、関数の中で作られた変数のことで、関数の外や、他の関数の中で使用することができません。

基本的に、関数の中で使用している変数は、ローカル変数となります。

グローバル変数とは、関数の外で定義される変数のことを言います。

グローバル変数は、関数の外でも、関数の中でも使用することができますが、関数の中で使用するにはその宣言をしなくてはなりません。


例えば、上記のプログラムの中で作られる変数は、以下の図のようなイメージです。

関数を習う前に使っていた関数は、全部グローバル変数だったんだね。

関数の中で使っていた変数xはローカル変数の方で、関数の外はグローバル変数ってことだね。

それで表示が異なっていたんだ。

でもさ、ローカル変数って不便じゃない?

その関数の中でしか使えないんだよね。

いいところに気づきましたね。

もし、関数で作成した変数が他の関数でも使えるようになったとき、変数の値がおかしい時に、どの関数が原因かがわかりにくくなるんです。

確かに。せっかく部品として関数を作ったのに、他の関数と同じデータを扱っていたら利点が減るかもしれませんね。

そういうものなのか。

でも、グローバル変数は関数の中で使えるって言いましたけど、どうやって使うんですか?

それは、「global」キーワードを使います。

以下のプログラムを実行してみましょう。

def function2():
  global x
  x = 10 # 10を代入
  print("関数function2の変数x:",x)

x = 20 # 20を代入
function2()
print("変数x:",x)

実行結果

関数function2の変数x:10
変数x:10

あ、どっちも10になった。

これは、2行目で global x と書くことで、「この関数で使う変数xは、グローバル変数の方だよ」と指定ができるんです。

変数を使うときは、スコープに注意して下さいね。

Well done!

次のステップに進みましょう!

次のステップに進む

← 前のステップにもどる