prev, prev_re = '', (None) # these are globals
def find(h, p='', re=None):
print h, p, re
#global prev, prev_re
if p == '' and prev == h: return prev_re
prev, prev_re = h, re
return re
print find ("abc")
このエラーが発生します:
if p == '' and prev == h: return prev_re
UnboundLocalError: local variable 'prev' referenced before assignment
$
しかし、前の最後の行にコメントするとfind
、
prev, prev_re = '', (None)
def find(h, p='', re=None):
print h, p, re
#global prev, prev_re
if p == '' and prev == h: return prev_re
#prev, prev_re = h, re
return re
print find ("abc")
コードは、エラーなしで、期待どおりに正しく実行されます。
私の質問は、最初のケースでグローバル変数が見つからない prev
理由と、2番目のケースでif
-conditionでグローバル変数が見つからない理由です。
編集:インタプリタが変数を見つけられない理由を理解するために、環境の構造の詳細を理解するのを手伝ってください。