以下のソースでは、Line 4 でグローバルスコープの hoge を宣言して、関数 func1, func2 で参照しています。
ただし func2 では func2 の関数中で value == 3 の場合、変数 hoge への代入を行っています。
この代入があるせいで func2 内では hoge は func2 のローカル変数になります。
python のソースがバイトコードに変換される際に func2 内の hoge はローカル変数として予約されるので value == 2 のように if 文を通過しない際には func2 内で hoge が宣言されず UnboundLocalError: local variable 'hoge' referenced before assignment という例外を発生してプログラムが終了します。
スコープを股がって変数を利用する際には注意が必要ですね……。
# -*- coding: utf-8 -*- #global変数 hoge = "hoge" def func1(): return hoge + " return by func1" def func2(value): #ここではローカルで hoge が利用される可能性があるので、 #hogeはローカル変数として割り当てられている if value == 3: hoge = "value is 3" return hoge print func1() #成功 print func2(3) #成功 print func2(2) #hoge がなくて、失敗
0 件のコメント:
コメントを投稿