PythonのSub関数での変数のスコープ
# -*- coding:sjis -*- def main(): x = 1 def sub1(): print x # 1 : main()localのx def sub2(): x = 2 print x # 2 : sub2()localのx def sub3(): print x # UnboundLocalError: local variable 'x' referenced before assignment # sub3()localのxが定義前に使用された! x = 3 sub1() sub2() #sub3() print x # 1
Sub関数では、Main関数の変数は、参照はできるけど書き換えはできないのか?
http://www.python.jp/doc/2.4/ref/naming.html
ある名前がコードブロック内で使われると、その名前を最も近傍から囲うようなスコープ (最内スコープ: nearest enclosing scope) を使って束縛の解決を行います。こうしたスコープからなる、あるコードブロック内で参照できるスコープ全ての集合は、ブロックの 環境 (environment) と呼ばれます。
...