2012-10-11 6 views

Odpowiedz

5

Można użyć parametru z domyślnej wartości na lambda:

for i in range(0, 2): 
    items.append(lambda i=i: dump(i)) 

Działa to, ponieważ wartość domyślna jest obliczana, gdy funkcja jest zdefiniowana, a nie po wywołaniu.

+0

człowiek, jesteś mądry. To był przykład, ale znalazłeś rozwiązanie, chodziło o to, jak ocenić to odwołanie do definicji lambda. Czy jest jakiś sposób na zrobienie tego? – bradojevic

4

Można użyć:

for i in range(0, 2): 
    items.append(lambda i=i: dump(i)) 

uchwycić aktualną wartość i

To działa, ponieważ domyślne wartości parametrów są oceniane w funkcji czasu tworzenia i i nie jest zmienna zewnętrzna, ale funkcja parametr, który będzie miał domyślną wartość.

Bardziej szczegółowe wyjaśnienie można znaleźć w tym answer.

0

Wartość wyjściowa to wartość i przy ocenie funkcji, a nie w jej deklaracji. Właśnie dlatego nie osiągasz pożądanego rezultatu.

1

Dla kompletności, można również zrobić:

for i in range(0, 2): 
    items.append((lambda i: lambda: dump(i))(i)) 
+0

Uważam, że ta odpowiedź jest najmniej hackowata, mimo że jest bardziej gadatliwa niż domyślna odpowiedź. – max