Python でのグローバル変数の非常に奇妙な扱いに出くわしました。誰かがこれらの驚きを説明し、正当化できることを願っていました!
A) このコードは、期待どおりに 10 を出力します。
def func():
print(a)
a = 10
func()
B) このコードは、早すぎる参照に関する例外をスローします。
def func():
print(a)
a += 1
a = 10
func()
C) しかし、このコードは期待どおり [10] を出力します:
def func():
print(a)
a.append(1)
a = [10]
func()
したがって、タイプa
がその範囲を変更し、さらに、まだ到達していない後のステートメントが表示方法を変更することを収集できa
ます。関数の開始時に使用できることはわかってglobal a
いますが、かなり冗長です。
奇妙なスコーピングを処理するために Python が使用しているルールを誰か教えてもらえますか?