変数のスコープとは
変数のスコープとは、変数がアクセスできる範囲のことです。変数をどこで作成したかによってスコープ(有効範囲)が違ってきます。変数の宣言場所は、大きく「関数内」と「関数外」の2通りあります。
まずは、通常の関数の例を見てみましょう。
# 1つ目のサンプルプログラム
def add(x1):
x2 = 10 # 関数内で変数を作成(ローカル変数)
result = x1 + x2
print(result)
add(5) # 5 + 10で15が出力
出力結果
15
add
関数内にx2
は定義されていませんが、7行目のadd
関数の引数で5を渡していることから、2行目のx1
に引数として5
を受け取り、4行目で足し算が正常に行われています。次に、変数のスコープ(有効範囲)に関するプログラムです。
# 2つ目のサンプルプログラム
def add(x1):
x2 = 10 # 関数内で変数を作成(ローカル変数)
result = x1 + x2
print(result)
add(5) # 5 + 10で15が出力
print(x2) # ここでエラーが発生
出力結果
NameError: name 'x2' is not defined
上記の2つ目のサンプルプログラムを実行すると、NameError: name ‘x2’ is not definedというメッセージがが発生してしまい正常にプログラムが動作しません。NameError
メッセージが発生する理由は、関数内で定義した変数x2
はローカル変数であり、ローカル変数のスコープは関数内部だけしか有効ではないため、関数の外側でx2
を呼び出すとNameError
が発生してしまいます。有効な解決手段として関数の外にx2
を定義することです。関数の外に定義することでグローバル変数として扱われます。上記のサンプルプログラムを改善したプログラムが下記になります。(※変数のスコープ以外にも、関数内部処理なども修正しています。)
x2 = 10 # 関数の外側で変数x2を作成(グローバル変数)
def add(x1):
# x2 = 10 # 関数内で変数を作成(ローカル変数)
result = x1 + x2
print(result)
add(5) # 5 + 10で15が出力
print(x2) # 10が出力
出力結果
15
10
Pythonを効率よく学ぶには?
Pythonを効率よく学ぶには、普段からPythonを利用している現役のデータサイエンティストや機械学習エンジニアに質問できる環境で学ぶことです。
質問し放題かつ、体系的に学べる動画コンテンツでデータ分析技術を学びたい方は、オンラインで好きな時間に勉強できるAI Academy Bootcampがオススメです。受講料も業界最安値の35,000円(6ヶ月間質問し放題+オリジナルの動画コンテンツ、テキストコンテンツの利用可能)なので、是非ご活用ください。