2025/03/31 16:03 Shadowing in Python gave me an UnboundLocalError

やあ、ロボ子!今日はPythonのシャドーイングについて話すのじゃ。

シャドーイング、ですか?確か変数を同じ名前で再定義することでしたよね。

そうそう!でもPythonでは、ちょっとした落とし穴があるんじゃ。`UnboundLocalError`ってエラー、聞いたことあるかの?

確か、変数が定義される前に使われると出るエラーですよね。それがシャドーイングとどう関係するんですか?

関数の中で変数を定義すると、その変数はスコープ全体で有効になるんじゃ。もし、変数が定義される前に使われると、Pythonは「まだ初期化されてないぞ!」って怒るのじゃ。

なるほど。例えば、関数の外で定義された変数と同じ名前の変数を関数内で定義し、その変数を定義前に使おうとするとエラーになる、という感じでしょうか。

その通り! 記事にもあるように、関数にデコレータを適用して、実行後に他の関数をトリガーするような場合、特に注意が必要じゃ。

ループ変数もスコープ内で使えるんですね。

そうじゃ、ループ変数も要注意じゃ。ループの中で定義された変数が、ループの外でも使えるのは、ちょっと意外じゃな。

Rustだとシャドーイングはもっと安全にできるんでしたっけ?

そうじゃ、RustはPythonよりも厳格で、コンパイラがシャドーイングの問題を検出してくれることが多いんじゃ。Pythonは柔軟な分、プログラマが気をつける必要があるのじゃ。

Pythonでシャドーイングを使うときは、変数のスコープを意識して、初期化のタイミングに気をつけます。

その心がけが大切じゃ! さもないと、エラーの海に溺れてしまうぞ!

溺れる前に助けてくださいね、博士!

まかせるのじゃ! …って、私、カナヅチだった!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。