私はC++のバックグラウンドを持ち、いくつかのPythonを学ぼうとしています。Late binding python closures
Whist私はC++の仮想関数を理解していますが、残念ながら、Pythonでクロージャの遅延バインディングが何を意味するのか分かりません。
リンク:https://gist.github.com/deemson/8efabf56d67623ead804
コピーパスタチュートリアルから:まさにここで何が起こっている
functions = []
for n in [1, 2, 3]:
def func(x):
return n*x
functions.append(func)
# You would expect this to print [2, 4, 6]
print(
'calling a list of bad closures and output is: {}'
.format(str([function(2) for function in functions]))
)
?関数がリストに追加されると、その値はどのような値になりますか?私が理解できるように、このコードを簡略化してください。
[6 6 6] – RickMota
の代わりにyeild [2 4 6]ではないでしょうか?ダニエルの答えは正しい - 彼は私がしなかったものをキャッチしました。それらはすべてnを参照し、nは最後に2の値に収まるので、すべての関数はまったく同じように動作します。 – Christian
私はnに依存することについて言及したが、C++のポインタへの接続を明確にするためにソリューションを投稿したままにしておきました。 – Christian