なんかそうなんじゃないかな、と思っていたのですが、いままでしっかりと確認していませんでした。そもそも、必要がない限りはループ変数をループの外側では使わない癖みたいなものがあって、なんとなくループ外でループ変数を直接参照するのを避けていたような気がします。しかし、今回は気になって調べました。
いつもお世話になっている Stack Overflow に自分と同じ疑問を投稿したものがありました [1]。少しだけ手直ししましたが下記の内容です。
for foo in range(10): bar = 2 print(foo, bar)
9 2
Python では、ループ変数はループ内だけで有効になっているわけではない(for 文はスコープを作らない)ということですが、C/C++ や Java ではありえない結果です。
念の為、正式な説明なるものを探したところ、参考サイト [2] を見つけました。
これはバグではなく、意図的に設計されたもので、Python 1 からずっとそうです。ということです。
Python は、必要に迫られて使い始めたプログラミング言語ということもあって、そもそもまじめに一から学んでいません。自戒を込めて、プログラミング言語が違えば、スコープの扱い方も異なるということで備忘録にしました。
参考サイト
- scope - Scoping in Python 'for' loops - Stack Overflow [2010-08-31]
- For Loop temporary variable scope should be local to For loop · Issue #88498 · python/cpython [2021-06-07]

にほんブログ村
#オープンソース


0 件のコメント:
コメントを投稿