2016-05-27 11 views
2

最初のコードスニペットは[0, 3]を出力します。 ": '' 代入する前に参照されたローカル変数UnboundLocalError"Pythonネストされた関数の可変スコープ

def func(): 
    a = [0] 

    def swim(): 
     # a.append(3) 
     a = [1]+a 
     return a 
    return swim() 

print(func()) 

aがアクセス可能/可視すべての後swimを機能させる

def func(): 
    a = [0] 

    def swim(): 
     a.append(3) 
     # a = [1]+a 
     return a 
    return swim() 

print(func()) 

2番目のコードスニペットは、エラーを発生させますか?

+1

@Pythonistaありがとうございました!代入があるとすぐに 'a'がローカル変数になるようです。 –

答えて

1

this linkに記載されているようなよくある質問です。なぜなら、変数aswimの中にあるのは、aという代入があるとすぐにローカル変数になるからです。外部aをシャドウし、ローカルaは関数swimで代入される前に定義されていないため、エラーが発生します。

皆さんのお返事ありがとうございます!

-1

最初のコードに要素を追加しています。 idaはまだ同じです。

しかし、2番目のコードでは、変数aを再定義しています。その変数のidが変更されています。だからあなたはUnboundLocalErrorを得る。

-2

a = [1] + aまたはa += [1]のような割り当てをスコープ内で実行すると、その変数はそのスコープに対してローカルになります。あなたの場合、それは機能swim()です。

関連する問題