keys - ¿Qué es "binding lambda" en Python?
python filter (3)
¿Dónde has visto la frase utilizada?
"Encuadernación" en Python generalmente se refiere al proceso por el cual un nombre de variable termina apuntando a un objeto específico, ya sea por asignación o paso de parámetros o por otros medios, por ejemplo:
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
Entonces, ¿supongo que "vinculación lambda" se refiere al proceso de vincular una función lambda a un nombre de variable, o tal vez vinculando sus parámetros con nombre a objetos específicos? Hay una buena explicación sobre el enlace en la Referencia del lenguaje, en http://docs.python.org/ref/naming.html
Entiendo cuáles son las funciones de lambda en Python, pero no puedo encontrar el significado de "vinculación de lambda" buscando en los documentos de Python. Un enlace para leer sobre él sería genial. Un ejemplo explicativo trivial sería incluso mejor. Gracias.
Nunca escuché ese término, pero una explicación podría ser el truco de "parámetro predeterminado" utilizado para asignar un valor directamente a un parámetro de lambda. Usando el ejemplo de Swati:
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
Primero, una definición general:
Cuando se ejecuta un programa o declaración de función, los valores actuales de los parámetros formales se guardan (en la pila) y dentro del alcance de la declaración, se vinculan a los valores de los argumentos reales realizados en la llamada. Cuando se sale de la declaración, se restauran los valores originales de esos argumentos formales. Este protocolo es completamente recursivo. Si dentro del cuerpo de una declaración, se hace algo que haga que los parámetros formales vuelvan a estar vinculados, a valores nuevos, el esquema de vinculación lambda garantiza que todo esto sucederá de manera ordenada.
Ahora, hay un excelente ejemplo de python en una discusión aquí :
"... solo hay un enlace para x
: hacer x = 7
solo cambia el valor en el enlace preexistente. Por eso
def foo(x):
a = lambda: x
x = 7
b = lambda: x
return a,b
devuelve dos funciones que ambas devuelven 7; si hubiera un nuevo enlace después de x = 7
, las funciones devolverían valores diferentes [suponiendo que no llame a foo (7), por supuesto. También asumiendo nested_scopes] .... "