概要
下記のようにネストした関数を定義した時、外側の関数で定義した変数を内側の変数ではアクセスできない。これは変数が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
コメント