以下のコードを考慮してください。Pythonのパラメータは実際に引数の別名ですか?
a = []
def func1(x):
return x
for i in range(3):
def func2():
return func1(i)
a.append(func2)
for k in range(3):
print(a[k]())
これは
http://gestaltrevision.be/wiki/python/aliases(最後のセクション)の 'エイリアスの使用' からプリントアウトするとhttp://gestaltrevision.be/wiki/python/functions_basicsの '適用範囲' セクションでは、私がいることを学びました関数の引数は実際に渡される引数のエイリアスです。
xがiはループが実行されるたびに再割り当てされていても、私のエイリアスとして格納されるので
def func1(x): return x
for i in range(3):
def func2(): return func1(i)
に私は推論だからによれば、それはそのエイリアスには関係しないであろう、バツ。
だから私は、最初の3つの出力0、1、2のラインの代わりに、2、2、2
を期待あなたは私がここで間違って何をしたか説明できますか?ありがとう
Oooh。つまり、実行時にxにバインドされるオブジェクト(別の名前として、もちろん)と関係がありますか? (私は値を印刷する?) –
@NamanJainあなたのコードでは、 'func1'の本体は実行時まで' i'について知りません。 **遅れ評価**のためです。だから、最後の瞬間に '関数func1(I)' iの範囲でfunc1'が、それは2 –
ある 'i'のために見つけたどのような値使用しますが、何のために」について'を評価する場合(3): デフ関数func2(K = i): return func1(k) '?私はこれを試しましたが、これは0 1 2を印刷しました。 –