Liste von Funktionen mittels List Comprehension erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Heini
User
Beiträge: 21
Registriert: Donnerstag 12. April 2007, 10:48

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.
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

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
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
Heini
User
Beiträge: 21
Registriert: Donnerstag 12. April 2007, 10:48

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.
Antworten