2017-07-04 7 views
1

xinnerのスコープ内のローカル変数であるため、次のコードを考えてみると、出力は2になると予想されました。しかし、代わりに2を印刷しました。なぜそうなのか分かりません。どんな説明やコメントもありがとうございます。このxは内部関数のローカルスコープにありますか?

def outer(): 
    x = 1 
    def inner(): 
     x = 1 
     x += 1 
     print x 
    return x 
+0

あなたは2を期待し、代わりに2を出力しましたか?それは同じではありませんか?また、そのコードは何も印刷しません。 –

答えて

0

二つの別々のx変数がここにあります:outer機能はx変数を持っており、inner機能は、独自のx変数を持っています。

関数のどこかに変数への代入がある瞬間から、変数にはローカルスコープがあります。

outer()に電話すると、1が返されます。 innerの機能のxは別のものであり、さらにinner()であり、決してと呼ばれています。その結果、(ローカル)xは印刷されません。

あなたはこのように書かれているだろう場合:

def outer(): 
    x = 3 
    def inner(): 
     x = 1 
     x += 1 
     print x 
    return x 

を次にouter()3を返します呼び出します。 outer()機能でinner()と呼んだとしても、の場合はとなります。 inner()関数のxは、outer()関数のもの(innerで定義されたローカルスコープがあります)以外のものです。あなたがprint 2という意味になりますが、return 3になります。

+0

ウィレムに指摘してくれてありがとう!範囲についての私の理解は正しいと思われますが、私は決して '内側 '関数を'外側'と呼びません。 –

+0

@RuilinLi:2つの 'x'変数は独立して動作します。 –

関連する問題