Was ist „Lambda-Bindung“ in Python?
Frage
Ich verstehe, was in Python Lambda-Funktionen sind, aber ich kann nicht finden, was die Bedeutung von „Lambda-Bindung“ durch Durchsuchen der Python-Dokumentation ist. Ein Link zu lesen über, es wäre toll. Ein triviales Beispiel erklärt wäre noch besser. Danke.
Lösung
Zuerst wird eine allgemeine Definition:
Wenn ein Programm oder Funktionsanweisung ausgeführt wird, die aktuellen Werte von formale Parameter werden gespeichert (auf dem Stack) und in den Rahmen der Anweisung, werden sie an das gebunden Werte der tatsächlichen Argumente in der Anruf. Wenn die Aussage verlassen, werden die ursprünglichen Werte derjenigen formale Argumente werden gestellt. Diese Protokoll ist vollständig rekursiv. wenn innerhalb von der Körper einer Aussage, etwas getan, dass die formalen Parameter verursacht gebunden wieder, um neue Werte zu, die Lambda-bindende Regelung gewährleistet, dass dies alles in einem geordneten passieren Art und Weise.
Nun, es ist eine ausgezeichnete Python Beispiel in einer Diskussion hier :
“... es ist nur eine Bindung für x
. Tun x = 7
ändert nur den Wert in die bereits bestehende Bindung Deshalb
def foo(x):
a = lambda: x
x = 7
b = lambda: x
return a,b
gibt zwei Funktionen, die beide 7 zurückkehren; wenn es eine neue Bindung nach dem x = 7
war, würden die Funktionen unterschiedliche Werte zurückgeben [vorausgesetzt, Sie rufen Sie nicht foo (7), natürlich. Auch unter der Annahme nested_scopes] .... "
Andere Tipps
Ich habe noch nie diesen Begriff gehört, aber eine Erklärung dafür könnte die „Standardparameter“ sein Hack verwendet, um eine Lambda der Parameter einen Wert direkt zuweisen. Mit Swati des Beispiel:
def foo(x):
a = lambda x=x: x
x = 7
b = lambda: x
return a,b
aa, bb = foo(4)
aa() # Prints 4
bb() # Prints 7
Wenn Sie die Phrase verwendet gesehen haben?
„Bindung“ in Python bezieht sich allgemein auf den Prozess, durch den ein Variablenname auf ein bestimmtes Objekt zeigt endet, sei es durch Übertragung oder Übergabe von Parametern oder andere Mittel, z.
a = dict(foo="bar", zip="zap", zig="zag") # binds a to a newly-created dict object
b = a # binds b to that same dictionary
def crunch(param):
print param
crunch(a) # binds the parameter "param" in the function crunch to that same dict again
So würde ich vermuten, dass „Lambda-Bindung“ auf das Verfahren bezieht sich eine Lambda-Funktion auf einen Variablennamen zu binden, oder vielleicht auf bestimmte Objekte seine benannte Parameter verbindlich? Es ist eine ziemlich gute Erklärung in der Sprachreferenz der Bindung an http://docs.python.org /ref/naming.html