【Python入門】関数と変数のスコープをわかりやすく解説|local・global・nonlocalの違い

Python

Pythonを学び始めたときに混乱しやすいのが「変数のスコープ」です。

スコープとは**「変数が使える範囲」**のことです。スコープを理解していないと、「変数が見つからない」「値が更新されない」といったエラーの原因になります。

この記事では、local・global・nonlocal の違いと使い方を初心者向けに解説します。

この記事の対象

  • 関数内の変数について知りたい方
  • 関数内での変数を扱う時の注意点を知りたい方
  • Global変数とLocal変数について使用例を知りたい方
スポンサーリンク
スポンサーリンク

変数とは

関数における変数にはルールがあります。Local変数とGlobal変数と使い分ける必要があります。関数内で利用した変数は関数の外では使用できません。

変数についてはこちらを参照してください。

スコープとは?

スコープ内容
local関数の中だけ有効
globalプログラム全体で有効
nonlocalネストされた関数内で外側の変数にアクセス

localスコープ(関数内の変数)

def my_func():
    x = 10
    print(x)

my_func()  # 10
print(x)    # NameError: name 'x' is not defined

ポイント

  • 関数内で定義した変数は、その関数の外では使えない

globalスコープ(プログラム全体で使える変数)

x = 5

def my_func():
    print(x)

my_func()  # 5
print(x)    # 5

ポイント

  • 関数外で定義した変数は、関数内からも参照できる

globalキーワードで値を変更

math = 80
def test():
 global math
 math = 70

test()
print("math=",math)

注意

  • global は便利だが、変数の管理が複雑になるので乱用は避ける

nonlocal(ネストされた関数で外側の変数を変更)

def outer():
    x = "outer"

    def inner():
        nonlocal x
        x = "inner"

    inner()
    print(x)

outer()  # inner

ポイント

  • 関数の中に関数がある場合、外側関数の変数を書き換えるときに使う

スコープに関するよくあるエラー

エラー例原因対策
NameError変数がスコープ外定義位置を確認
UnboundLocalError関数内で代入しているのに global/nonlocal を指定していないキーワードを使う

まとめ

  • local:関数内だけ有効
  • global:プログラム全体で有効
  • nonlocal:ネスト関数の外側変数を変更
  • スコープを理解すればエラーを減らせる

関連記事

タイトルとURLをコピーしました