Nachdem ich alles gelesen habe, was ich auf Lambda finden kann, verstehe ich immer noch nicht, wie ich es dazu bringen soll, das zu tun, was ich will.
Jeder benutzt das Beispiel:
lambda x, y : x + y
Warum müssen Sie beide x
und y
vor dem :
angeben? Wie kann man auch mehrere Argumente zurückgeben?
beispielsweise:
self.buttonAdd_1 = Button(self, text='+', command=lambda : self.calculate(self.buttonOut_1.grid_info(), 1))
Das funktioniert gut. Der folgende Code funktioniert jedoch nicht:
self.entry_1.bind("<Return>", lambda : self.calculate(self.buttonOut_1.grid_info(), 1))
Es ergibt sich der Fehler:
TypeError: () akzeptiert keine Argumente (1 angegeben)
quelle
(train["pred_idx_cos"],train["target"]).apply(lambda x,y: get_result(x, y))
und es scheint, dass es nicht funktioniert. Bitte rette meine Seele vor dem Nebel der prozeduralen ProgrammierungIch glaube, bind versucht immer, einen Ereignisparameter zu senden. Versuchen:
Sie akzeptieren den Parameter und verwenden ihn niemals.
quelle
Weil es sich um eine Funktionsdefinition handelt und bekannt sein muss, welche Parameter die Funktion in welcher Reihenfolge akzeptiert. Es kann nicht nur den Ausdruck betrachten und die Variablennamen darin verwenden, da einige dieser Namen möglicherweise vorhandene lokale oder globale Variablenwerte verwenden möchten, und selbst wenn dies der Fall wäre, würde es nicht wissen, in welcher Reihenfolge sollte erwarten, sie zu bekommen.
Ihre Fehlermeldung bedeutet, dass Tk Ihr Lambda mit einem Argument aufruft, während Ihr Lambda so geschrieben ist, dass es keine Argumente akzeptiert. Wenn Sie das Argument nicht benötigen, akzeptieren Sie einfach eines und verwenden Sie es nicht. ( Demosthenex hat den Code , ich hätte ihn gepostet, wurde aber geschlagen.)
quelle
In einigen Situationen (wenn Sie nur ein Argument haben) können Sie x und y nicht vor ":" setzen.
aber das i im Lambda wird namentlich gebunden sein, also
anders als Sie vielleicht wollen.
quelle