【Python】ネストした関数で外側の関数で定義した変数に内側の関数でアクセスする方法

Python

概要

下記のようにネストした関数を定義した時、外側の関数で定義した変数を内側の変数ではアクセスできない。これは変数がvarのスコープがそれぞれouter(), inner()のローカルスコープとなっているため。

def outer():
    var = "outer variable"

    def inner():
        var = "inner variable"

    inner()
    print(var)


outer()
>> python .\test.py
outer variable

アクセスする場合は以下のようにする。

1. グローバルスコープで定義する。

def outer():
    global var
    var = "outer variable"

    def inner():
        global var
        var = "inner variable"

    inner()
    print(var)


outer()
>> python .\test.py
inner variable

2. nonlocalを使う。

def outer():
    var = "outer variable"

    def inner():
        nonlocal var
        var = "inner variable"

    inner()
    print(var)


outer()
>> python .\test.py
inner variable

コメント

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