Pythonの変数のスコープ

変数の宣言が無いので、ブロック外で使用されている変数があれば、
その値を書き換えてしまう。


ブロックで変数を使う時は、ブロック外で定義されているかどうか注意しないといけないのか?
ifでインデントされた処理単位を、ブロックと呼んでいいのかどうかもよくわからない。
▼名前づけと束縛 (naming and binding)
http://www.python.jp/doc/release/ref/naming.html


関数が一つのスコープ単位になるけど、
インデントによるブロックは、変数のスコープには影響しないみたい。
これは、C++と比べると、ちょっと不便かもしれない。
長い関数は作るなってことかな。

サンプル

def test():
	a = 1
	if True:
		a = 2
		if True:
			b = 4
			a = 3
		print a
	print a
	print b

結果は
3
3
4