スコープ¶
スコープとは、「変数の有効範囲」のことです。「定義した変数を使うことのできる範囲」というイメージで考えましょう。
スコープにはグローバルスコープとローカルスコープの2種類があります。
グローバルスコープにある変数をグローバル変数、ローカルスコープにある変数をローカル変数と呼びます。
グローバル変数は、その変数があるPythonファイル(モジュール)のどこからでも使うことができます。一方、ローカル変数は定義されている関数内でのみ使えます。
ローカル変数を関数の外で使うとNameError
が発生します。
global_spam = 'グローバル変数'
def local_scope():
local_spam = 'ローカル変数'
print(global_spam) # 'グローバル変数'が表示される
print(local_spam) # 'ローカル変数'が表示される
print(local_spam) # NameErrorが発生する
グローバル変数とローカル変数の名前が重複するとき、ローカルスコープではそのスコープに属するローカル変数が優先されます。
spam = 'グローバル変数'
def local_scope():
spam = 'ローカル変数'
print(spam) # 'ローカル変数'が表示される
print(spam) # 'グローバル変数'が表示される
さまざまなスコープと名前空間を参照する¶
global
文を使うことでスコープの外側にある変数を参照することができます。
以下がglobal
文を実際に使ったコードと解説です。
spam = 'test spam' # グローバル変数
def do_local():
spam = 'local spam'
print(spam)
def do_global():
global spam
spam = 'global spam' # この変数spamへの代入はグローバル変数への代入になる
print(spam)
print('グローバル変数の値 ', spam)
do_local()
print('グローバル変数の値 ', spam)
do_global()
print('グローバル変数の値 ', spam) # do_global()を実行したため`global spam'と出力される
do_local()
関数:
この関数のローカル変数spamに 'local spam' と代入
グローバル変数spamの値は変化しない
do_global()
関数:
global文によって、do_global()関数の外側(グローバルスコープ)に変数spamを作るイメージ
変数spamに 'global spam' と代入(グローバルスコープの変数spamの値を上書きする)
スコープについてさらに詳しく学ぶには、Python3公式ドキュメント-チュートリアル 9.クラスを参照ください。