Python スコープ
Note: 変数は作成された領域内でのみ利用可能です。これをスコープと呼びます。
ローカルスコープ
関数内で作成された変数はその関数のローカルスコープに属し、その関数内でのみ使用できます。
例
関数内で作成された変数はその関数内で利用できます:
def myfunc():
x = 300
print(x)
myfunc()
関数内の関数
上記の例で説明したように、変数 x は関数の外では利用できませんが、関数内の任意の関数からは利用できます:
例
ローカル変数は関数内の関数からアクセスできます:
def myfunc():
x = 300
def myinnerfunc():
print(x)
myinnerfunc()
myfunc()
グローバルスコープ
Pythonコードのメイン部分で作成された変数はグローバル変数であり、グローバルスコープに属します。
グローバル変数はどのスコープからでも利用可能です。
例
関数の外で作成された変数はグローバルであり、誰でも利用できます:
x = 300
def myfunc():
print(x)
myfunc()
print(x)
変数の命名
関数の内外で同じ変数名を使用する場合、Pythonはそれらを別々の変数として扱います。一つはグローバルスコープ(関数の外)、もう一つはローカルスコープ(関数の内)です。
例
この関数はローカルの x を表示し、その後コードはグローバルの x を表示します:
x = 300
def myfunc():
x = 200
print(x)
myfunc()
print(x)
グローバルキーワード
ローカルスコープに固執したままグローバル変数を作成する必要がある場合、global
キーワードを使用できます。
global
キーワードにより変数はグローバルスコープになります。
例
global
キーワードを使用すると、変数はグローバルスコープに属します:
def myfunc():
global x
x = 300
myfunc()
print(x)
また、関数内でグローバル変数の値を変更する場合も、global
キーワードを使用します。
例
関数内でグローバル変数の値を変更する場合は、global
キーワードを使用して変数にアクセスします:
x = 300
def myfunc():
global x
x = 200
myfunc()
print(x)
nonlocalキーワード
nonlocal
キーワードはネストした関数内で変数を扱う場合に使用されます。
nonlocal
キーワードにより変数は外側の関数に属します。
例
nonlocal
キーワードを使用すると、変数は外側の関数に属します:
def myfunc1():
x = "Jane"
def myfunc2():
nonlocal x
x = "hello"
myfunc2()
return x
print(myfunc1())