Pythonのスコープ規則については質問していません。Pythonのループでスコープがどのように機能するか一般的に理解しています。私の質問は、なぜ設計の決定がこのように行われたのかです。例(しゃれは意図されていません):
for foo in xrange(10):
bar = 2
print(foo, bar)
上記は(9,2)を出力します。
これは奇妙なことに私を襲います: 'foo'は実際にはループを制御するだけであり、 'bar'はループ内で定義されました。ループの外で「bar」にアクセスできる必要がある理由を理解できます(そうしないと、forループの機能が非常に制限されます)。私が理解していないのは、ループの終了後も制御変数がスコープ内に留まる必要がある理由です。私の経験では、グローバルな名前空間が乱雑になり、他の言語のインタープリターがキャッチするエラーを追跡することが難しくなります。
for
ループがグローバル名前空間を乱雑にしたくない場合は、関数でラップします。大量の閉鎖!