Seite 1 von 1

Liste von Funktionen mittels List Comprehension erstellen

Verfasst: Mittwoch 30. April 2014, 12:18
von Heini
Hallo,

ich möchte eine Liste von Funktionen erstellen und scheitere leider, da alle Funktionen in der Liste am Ende identisch sind.

Code: Alles auswählen

f = lambda x,n: x**n
N = range(4)

l = [lambda x: f(x,n) for n in N]

for g in l:
    print g(2)
Das Problem ist offenbar, dass 'lambda' erst beim Aufruf den Wert von 'n' abfragt und daher alle Funktionen für das letzte 'n' in der Schleife berechnet werden.

Kann mir jemand helfen?

Grüße

P.S.: Die Definition von f mittels lambda ist hier nicht ausschlaggebend. Man kann x**n auch direkt in die list comprehension schreiben. Auch die Herausnahme von 'range' in N ist für das Problem nicht von Bedeutung. Das Resultat ist das Gleiche, aber so wie oben dargestellt ist das Problem näher an meiner Struktur dran.

Re: Liste von Funktionen mittels List Comprehension erstelle

Verfasst: Mittwoch 30. April 2014, 12:24
von anogayales
Verwende dazu am besten die Funktion 'partial' im 'functools' Modul. https://docs.python.org/2/library/funct ... ls.partial

Für eine detailierte Erklärung sollte eine Google Suche zu Ergebnissen führen :)

Grüße,
anogayales

Re: Liste von Funktionen mittels List Comprehension erstelle

Verfasst: Mittwoch 30. April 2014, 12:46
von BlackJack
Alternativ, falls sich `partial()` nicht verwenden lässt:

Code: Alles auswählen

In [13]: fs = [lambda x, n=n: pow(x, n) for n in xrange(4)]

In [14]: for f in fs:                                      
   ....:     print f(2)
   ....: 
1
2
4
8

Re: Liste von Funktionen mittels List Comprehension erstelle

Verfasst: Mittwoch 30. April 2014, 13:36
von Heini
Vielen Dank an euch!

Ich verwende jetzt BlackJacks Lösung, da sie nur minimal von dem abweicht was ich intuitiv schreiben würde und der Programmteil auch später noch leicht verständlich bleibt.