2008-10-02 28 views
10

Rozumiem, jakie są funkcje lambda w Pythonie, ale nie mogę znaleźć znaczenia "wiązania lambda", przeszukując dokumentację w języku Python. Link do przeczytania o tym byłby świetny. Trywialny wyjaśniony przykład byłby jeszcze lepszy. Dziękuję.Co to jest "wiązanie lambda" w Pythonie?

Odpowiedz

13

pierwszy, ogólnej definicji:

Gdy program lub funkcja oświadczenie jest wykonywany, bieżące wartości formalnych parametrów są zapisywane (na stosie ) i w zakresie oświadczenia są one powiązane z wartościami rzeczywistymi argumentów podanych w wywołania. Po zakończeniu instrukcji zostaną przywrócone oryginalne wartości argumentów formalnych . Ten protokół jest w pełni rekurencyjny. Jeżeli w ciągu ciało oświadczeniu coś zrobić, że powoduje formalne parametry być ponownie związany, do nowych wartości, lambda wiążących gwarancji, że schemat ten będzie wszystko zdarzają się w sposób uporządkowany sposób.

Teraz jest doskonały python example in a discussion here:

”... istnieje tylko jeden wiążący dla x: robi x = 7 prostu zmienia wartość w istniejących wcześniej wiązania Dlatego

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

zwraca dwie funkcje, które zwracają 7, jeśli pojawiły się nowe wiązania po x = 7, funkcje zwróciłyby różne wartości [zakładając, że nie nazwiesz foo (7), oczywiście zakładając również nested_scopes] .... "

+0

Pierwszy ogniwo nie żyje –

1

Gdzie widziałeś używane wyrażenie?

„Wiązanie” w Pythonie ogólnie odnosi się do procesu, w którym zmienna nazwa kończy się skierowaną do określonego przedmiotu, czy to przez przyporządkowanie lub parametrów przejścia lub w inny sposób, np

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 

więc byłoby zgadnij, że "powiązanie lambda" odnosi się do procesu wiązania funkcji lambda do nazwy zmiennej, czy też wiązania ich nazwanych parametrów do konkretnych obiektów? Jest to dość dobre wyjaśnienie wiążące w skorowidzu języka, w http://docs.python.org/ref/naming.html

7

Nigdy nie słyszałem tego terminu, ale jednym wyjaśnieniem może być "domyślny parametr", który służy do przypisania wartości bezpośrednio do parametru lambda. Na przykładzie 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

Skąd się wzięły 4? – mattbasta

+0

+1: Jestem pewien, że ta informacja to inne miejsca, ale to było dokładnie to, czego potrzebowałem ... wielki uścisk !!! –