【Python】変数のスコープを理解しよう!初学者向けにわかりやすく解説!

変数のスコープとは

変数のスコープとは、変数がアクセスできる範囲のことです。変数をどこで作成したかによってスコープ(有効範囲)が違ってきます。変数の宣言場所は、大きく「関数内」と「関数外」の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ヶ月間質問し放題+オリジナルの動画コンテンツ、テキストコンテンツの利用可能)なので、是非ご活用ください。