私は、Pythonの可変バインディングがどのように正確に動作しているかを理解しようとしています。これを見てみましょう:python:バインディングのしくみ
def foo(x):
def bar():
print y
return bar
y = 5
bar = foo(2)
bar()
これは私にとって妥当と思われる5を出力します。
def foo(x):
def bar():
print x
return bar
x = 5
bar = foo(2)
bar()
これは、2が奇妙です。最初の例では、Pythonは実行中に変数を探しますが、メソッドが作成された時点で変数が検索されます。それはなぜそうですか?
これは非常に涼しく、私が好きなように正確に動作します。しかし、私は内部バー関数がそのコンテキストを取得する方法について混乱しています。私は理解したい、ボンネットの下で何が起こるか。
EDIT
私は、ローカル変数が大きい優先順位を持っていることを、知っています。 Pythonが実行中に私が以前呼び出された関数から引数を取る方法を知っているかどうか、私は不思議です。 bar
はfoo
に作成され、x
はこれ以上存在しません。これは、関数が作成されたときにこのx
を引数値にバインドしましたか?
リンクは偉大なことを説明しました。どうもありがとう。 – gruszczy