スコープ内の変数へアクセスするため、以下の場合、関数の外であっても、スコープに変数xが存在するため、値を取得できる。
x = 42
def f():
print(x) # 42
f()
以下のように、スコープ内に同じ名前がある場合はどうなるだろうか。
x = 42
def f2():
x = 0
print(x) # 0
f2() # 関数内のxの値が更新される
print(x) # 42
f2()内でxに0を代入しているが、関数の外のx(42が入っている)には影響を与えない。
f2()関数内で、ローカルな変数として宣言、代入されるためだ。
関数の外のx = 42の x はグローバル変数と呼ばれる。
もし、関数内からグローバル変数の値を更新したい場合は以下のようにする。
x = 42
def f3():
global x
x = 0
print(x) # 0
f3() # 関数内のxの値が更新される
print(x) # 0
global x と宣言することで、f3()関数内の x がグローバル変数を参照する。