Ich habe einen Hintergrund von C++ und versuchen, etwas Python zu lernen.Late Binding Python Verschlüsse
Whist ich verstehe virtuelle Funktionen für C++, ich verstehe leider nicht, was mit späten Bindung von Schließungen in Python gemeint ist.
-Link: https://gist.github.com/deemson/8efabf56d67623ead804
Copy-Pasta aus einem Tutorial:
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]))
)
Was genau ist hier passiert? Wenn die Funktion an die Liste angehängt wird, welche Werte hat sie? Kann jemand bitte diesen Code für mich verständlicher machen.
Aber wäre das nicht yeild [2 4 6] statt [6 6 6] – RickMota
Daniels Antwort ist richtig - er etwas gefangen habe ich nicht. Sie alle beziehen sich auf n, und da sich n am Ende auf einen Wert von 2 festgelegt hat, verhalten sich alle Funktionen genau gleich. – Christian
Ich habe geändert, um die Abhängigkeit von n zu erwähnen, und verlasse die gelieferte Lösung, um die Verbindung zu Zeigern in C++ zu klären. – Christian