Pythonでは、変数のスコープはその変数がアクセスできる範囲を指します。変数のスコープは、変数がどこで作成されたかによって異なります。具体的には、「関数内」で作成された変数と「関数外」で作成された変数の2つがあります。
グローバル変数とローカル変数
Pythonでは、関数内で変数を呼び出したとき、すでにグローバルで定義されていた場合はグローバル変数が使用されます。しかし、関数内で変数に代入を行った場合、その変数はローカルスコープとして扱われ、例外が発生する可能性があります。
global_var = "Global Variable"
def get_global():
local_var = global_var
return local_var
print(get_global()) # "Global Variable"が出力されます
上記の例では、get_global
関数内でglobal_var
を参照しています。このとき、global_var
はグローバルスコープで定義されているため、問題なく参照できます。
しかし、以下のように関数内でグローバル変数に代入を行った場合、問題が発生します。
global_var = "Global Variable"
def get_global():
local_var = global_var
global_var = "Reset Local" # ここでエラーが発生します
return local_var
print(get_global())
この例では、get_global
関数内でglobal_var
に代入を行っています。この代入により、global_var
はローカルスコープとして扱われ、その結果、local_var = global_var
の行でエラーが発生します。
グローバル変数の明示的な使用
グローバル変数を関数内で使用する場合は、global
キーワードを使用して明示的にグローバル変数を使用することができます。
common_var = "Global Variable"
def get_global():
global common_var
common_var = "Local Variable"
return common_var
print(get_global()) # "Local Variable"が出力されます
print(common_var) # "Local Variable"が出力されます
この例では、get_global
関数内でglobal
キーワードを使用してcommon_var
をグローバル変数として扱っています。その結果、関数内でcommon_var
に代入を行ってもエラーが発生せず、グローバル変数の値が更新されます。
以上がPythonの変数スコープについての基本的な説明です。この知識を持っておくことで、変数の扱いに関するエラーを避けることができます。