1

重複の可能性:
Python variable scope question
Python ネストされた関数スコープ

次のコードについて混乱しています

def func():
    a=10
    def func2():
        print a
        a=20
    func2()
    print a

func()

Python 2.7 では、上記のコードを実行すると、代入前に 'a' が参照されている場合UnboundLocalError、 python はエラー を返します。func2print a

しかし、私がコメントa=20するとfunc2、すべてがうまくいきます。Python は 10 行を 2 行出力します。つまり、次のコードは正しいです。

def func():
    a=10
    def func2():
        print a

    func2()
    print a

func()

なんで?他の言語では、c/c++ のように

{
    a=10
    {
        cout<<a<<endl //will give 10
        a=20          //here is another a
        cout<<a<<endl //here will give 20
    }
}

ローカル変数と外部変数は非常に明確に区別できます。

4

1 に答える 1

1

行を追加することによりa=20、Python はコードを分析し、それaがローカル変数名としても使用されていることを確認します。その場合、( で) まだ定義されていない変数の値を出力しようとしていますfunc2

その行がなければ、Python はaのスコープからのの値を使用しますfunc(これは の中でまだ有効ですfunc2)。これが C/C++ の例とは異なることは正しいです。

于 2012-08-21T09:36:03.020 に答える