Cos'è & # 8220; lambda binding & # 8221; in Python?
Domanda
Comprendo quali sono le funzioni lambda in Python, ma non riesco a trovare il significato di "associazione lambda" cercando nei documenti di Python. Un link per leggerlo sarebbe fantastico. Un banale esempio spiegato sarebbe ancora meglio. Grazie.
Soluzione
Innanzitutto, una definizione generale:
Quando un'istruzione di programma o funzione viene eseguito, i valori correnti di i parametri formali vengono salvati (sul stack) e nell'ambito del dichiarazione, sono legati al valori degli argomenti reali inseriti in la chiamata. Quando la dichiarazione è usciti, i valori originali di quelli gli argomenti formali vengono ripristinati. Questo il protocollo è completamente ricorsivo. Se dentro il corpo di una dichiarazione, qualcosa lo è fatto che causa i parametri formali da rileggere, a nuovi valori, il Lo schema di associazione lambda lo garantisce tutto ciò accadrà in modo ordinato modo.
Ora, c'è un eccellente esempio di pitone in una discussione qui :
" ... esiste solo un'associazione per x
: fare x = 7
modifica semplicemente il valore nell'associazione preesistente. Ecco perché
def foo(x):
a = lambda: x
x = 7
b = lambda: x
return a,b
restituisce due funzioni che restituiscono entrambe 7; se ci fosse una nuova associazione dopo x = 7
, le funzioni restituiranno valori diversi [supponendo che tu non chiami foo (7), ovviamente. Supponendo anche nested_scopes] .... "
Altri suggerimenti
Non ho mai sentito quel termine, ma una spiegazione potrebbe essere il parametro "quot" predefinito " l'hack usato per assegnare un valore direttamente al parametro lambda. Utilizzando l'esempio di 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
Dove hai visto la frase usata?
" Binding " in Python generalmente si riferisce al processo mediante il quale un nome di variabile finisce per puntare a un oggetto specifico, sia per assegnazione o passaggio di parametri o in altro modo, ad es .:
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
Quindi immagino che "rilegatura lambda" si riferisce al processo di associazione di una funzione lambda a un nome di variabile, o forse l'associazione dei parametri denominati a oggetti specifici? C'è una buona spiegazione del legame nel riferimento linguistico, a http://docs.python.org /ref/naming.html