Mam tło z C++ i staram się nauczyć jakiegoś Pythona.Późne wiążące zamknięcia Pythona
Whist Rozumiem funkcje wirtualne dla C++, niestety nie rozumiem, co rozumie się przez późne wiązanie zamknięcia w python.
Link: https://gist.github.com/deemson/8efabf56d67623ead804
Copy-makaron z samouczka:
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]))
)
Co dokładnie się tu dzieje? Kiedy funkcja jest dołączana do listy, jakie są jej wartości? Czy ktoś może uprościć ten kod, abym to zrozumiał.
Ale czy to nie yeild [2 4 6] zamiast [6 6 6] – RickMota
Odpowiedź Daniela jest prawidłowa - złapał coś, czego nie zrobiłem. Wszystkie odnoszą się do n, a ponieważ n ma ustaloną wartość 2 na końcu, wszystkie funkcje będą zachowywać się w ten sam sposób. – Christian
Zmieniono, aby wspomnieć o zależności od n, i pozostawiam rozwiązanie opublikowane w celu wyjaśnienia połączenia ze wskaźnikami w C++. – Christian