以下のソースでは、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 件のコメント:
コメントを投稿