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())