[解決済み】Pythonのforループのスコープについて
質問
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
関連
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
python string splicing.join()とsplitting.split()の説明
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み】Python: OverflowError: 数学の範囲エラー