1. ホーム
  2. パイソン

[解決済み】Pythonのforループのスコープについて

2022-04-08 03:19:27

質問

Pythonのスコープルールについて質問しているのではありません。 どのように Pythonのforループではscopingが機能します。私の質問は なぜ という設計上の決定がなされました。例えば(ダジャレではありません)。

for foo in xrange(10):
    bar = 2
print(foo, bar)

上記は(9,2)と表示されます。

foo'はループを制御しているだけで、'bar'はループの内側で定義されています。ループの外から'bar'にアクセスする必要があるのは理解できる(さもなければ、forループは非常に限定的な機能しか持たない)。しかし、ループを抜けた後も制御変数がスコープに残っている必要があるのかがよくわからない。私の経験では、単にグローバルな名前空間が乱雑になり、他の言語のインタプリタなら捕らえることができるエラーを追跡するのが難しくなるだけです。

解決するには?

最も可能性の高い答えは、文法をシンプルに保つことができ、採用の障害になっていないこと、そしてループ構成内で名前を代入する際に、その名前が属するスコープを曖昧にする必要がないことに多くの人が満足していることでしょう。 変数がスコープで宣言されることはなく、代入文の位置で暗示されます。 そのため global キーワードが存在するのは、このためです(グローバルスコープでの代入を意味します)。

更新

このトピックに関する良い議論をご紹介します。 http://mail.python.org/pipermail/python-ideas/2008-October/002109.html

<ブロッククオート

これまでのfor-loopの提案 ループのローカル変数 という問題でつまずいた。 ループ変数に依存するコード を終了した後もその値を保持する というのがあるようで、これは は、望ましい機能であるとみなされています。

要するに、Pythonコミュニティのせいにすればいいのでしょう :P