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.
Hallo,
bin noch neu was Python angeht.
Ich versuche in der zweiten Zeile den Wert i der Variable numb zuzuweisen. Anschließend soll eine Funktion mit dem Parameter numb aufgerufen werden:
@Steffo: Die Syntax von ``lambda`` sieht anders aus. Die Argumentliste kommt zwischen ``lambda`` und dem ``:`` und ein ``;`` kann in einem einfachen Ausdruck überhaupt nicht vorkommen.
Das mit der Argumentliste ist mir schon klar. Das Problem hierbei ist, dass die lambda-Funktion erst nach der Schleifen-Iteration aufgerufen wird und mir der jeweilige aktuelle Wert von "i" nicht mehr zur Verfügung steht, weswegen ich "i" irgendwie zwischenspeichern muss.
Wenn ich beispielsweise folgendes schreibe, wird der letzte Wert, nämlich 7, gespeichert:
@Steffo: Nochmal: Die Argumentliste kommt zwischen das ``lambda`` und den ``:``. Das binden von ``numb`` einfach weg zu lassen, löst natürlich das Problem nicht.
Oh, und falls das Absicht war, dass ``numb = i`` in den „Körper” der Lambda-Funktion sollte — das löst das Problem natürlich auch nicht, denn dann würde eben noch `numb` der Wert zugewiesen den `i` nach dem letzten Schleifendurchlauf hatte.
Und schlag mal `numb` im Englisch-Wörterbuch nach. Abkürzungen sollte man vermeiden. Die hier ist vollkommen willkürlich und verwirrt zusätzlich weil ein ”sinnvolles” Wort dabei heraus kommt. Und das alles nur um insgesamt vier Zeichen zu sparen.
@BlackJack: Ich glaube, du hast die Intention von Steffos Code falsch verstanden. Zumindest, scheint functools.partial genau das zu machen, was er benötigt hat. Das ``numb=i`` war meiner Meinung nach nur ein verzweifelter Versuch (oder ein Andeutung für uns), dass der Wert von i irgendwie beim Funktionsaufruf verwendet werden soll. Dass ``lambda numb=i: func(numb)`` eine mögliche Alternative zu partila ist, ist Steffo wahrscheinlich nicht klar gewesen. Für uns sieht das ganze dann natürlich nach einem falschen Aufruf von lambda aus.
@Steffo: Weil es verständlicher ist. Wer nicht weiss was es macht, kann einfach `functools.partial()` in der Dokumentation nachschlagen. Warum das mit Default-Argumenten funktioniert ist nicht so offensichtlich und wenn man es nicht weiss, auch nicht so einfach in der Dokumentation zu finden, weil man dann ja gar nicht genau weiss *wonach* man eigentlich sucht.