2008-10-02 13 views
10

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 trivial explicado sería incluso mejor. Gracias.¿Qué es "binding lambda" en Python?

Respuesta

13

En primer lugar, una definición general:

Cuando se ejecuta una instrucción del programa o función , los valores actuales de parámetros formales se guardan (en la pila ) y dentro del alcance de la declaración , están vinculados a los valores de los argumentos reales realizados en la llamada. Cuando se sale de la instrucción , se restauran los valores originales de esos argumentos formales . Este protocolo es completamente recursivo. Si dentro de el cuerpo de un comunicado, algo está hecho que hace que los parámetros formales a estar unidos de nuevo, a los nuevos valores, los vinculante lambda-garantías esquema que Todo esto va a suceder en un manera ordenada.

Ahora, hay una excelente python example in a discussion here:

" ... sólo hay una unión para x: hacer x = 7 sólo cambia el valor de la unión preexistente Por eso

def foo(x): 
    a = lambda: x 
    x = 7 
    b = lambda: x 
    return a,b 
.

devuelve dos funciones que devuelven 7; si hubiera una nueva vinculación después del x = 7, las funciones devolverían valores diferentes [asumiendo que no se llama a foo (7), por supuesto. También asumiendo nested_scopes] .... "

+0

El primer enlace está muerto –

1

¿Dónde has visto la frase utilizada?

"Encuadernación" en Python se refiere generalmente al proceso por el que un nombre de variable termina apuntando a un objeto específico, ya sea por cesión o traspaso de parámetros o algún otro medio, 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 

Así lo haría ¿Adivina 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 muy buena explicación de la unión en la referencia del lenguaje, en http://docs.python.org/ref/naming.html

7

Nunca escuché ese término, pero una explicación podría ser el "hack de parámetro predeterminado" utilizado para asignar un valor directamente al parámetro de una 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 
+0

¿De dónde vino el 4? – mattbasta

+0

+1: Estoy seguro de que esta información está en otros lugares, pero esto era exactamente lo que necesitaba ... ¡¡¡un gran abrazo !!! –