x
がinner
のスコープ内のローカル変数であるため、次のコードを考えてみると、出力は2になると予想されました。しかし、代わりに2
を印刷しました。なぜそうなのか分かりません。どんな説明やコメントもありがとうございます。このxは内部関数のローカルスコープにありますか?
def outer():
x = 1
def inner():
x = 1
x += 1
print x
return x
x
がinner
のスコープ内のローカル変数であるため、次のコードを考えてみると、出力は2になると予想されました。しかし、代わりに2
を印刷しました。なぜそうなのか分かりません。どんな説明やコメントもありがとうございます。このxは内部関数のローカルスコープにありますか?
def outer():
x = 1
def inner():
x = 1
x += 1
print x
return x
二つの別々の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
になります。
ウィレムに指摘してくれてありがとう!範囲についての私の理解は正しいと思われますが、私は決して '内側 '関数を'外側'と呼びません。 –
@RuilinLi:2つの 'x'変数は独立して動作します。 –
あなたは2を期待し、代わりに2を出力しましたか?それは同じではありませんか?また、そのコードは何も印刷しません。 –