以下の記事がとても有用だったのでメモします.
Why am I getting an UnboundLocalError when the variable has a value? - Programming FAQ - Python 3
以下のスクリプトは実行されます.
x = 10 def bar(): print(x) bar()
10
x=1
を追加すると,UnboundLocalError
が発生します.
x = 10 def bar(): print(x) x = 1 bar()
Exception has occurred: UnboundLocalError local variable 'x' referenced before assignment File "C:\Users\a\b\r.py", line 5, in bar print(x) File "C:\Users\a\b\r.py", line 9, in <module> bar()
Pythonのスコープについて
In Python, variables that are only referenced inside a function are implicitly global. If a variable is assigned a value anywhere within the function’s body, it’s assumed to be a local unless explicitly declared as global. *1
関数内で変数を参照するだけならば,その変数はグルーバル変数になる.関数内で変数に代入すると,その変数はローカル変数となる.グローバル変数として扱うために,global
で明示しなければならない.