Après avoir lu tout ce que je peux trouver sur lambda, je ne comprends toujours pas comment le faire faire ce que je veux.
Tout le monde utilise l'exemple:
lambda x, y : x + y
Pourquoi devez-vous indiquer les deux x
et y
avant le :
? Aussi comment faire renvoyer plusieurs arguments?
par exemple:
self.buttonAdd_1 = Button(self, text='+', command=lambda : self.calculate(self.buttonOut_1.grid_info(), 1))
Cela fonctionne très bien. Mais le code suivant ne le fait pas:
self.entry_1.bind("<Return>", lambda : self.calculate(self.buttonOut_1.grid_info(), 1))
Cela donne l'erreur:
TypeError: () ne prend aucun argument (1 donné)
la source
(train["pred_idx_cos"],train["target"]).apply(lambda x,y: get_result(x, y))
et il semble que cela ne fonctionne pas. S'il vous plaît, sauvez mon âme du brouillard de la programmation procéduraleJe crois que bind essaie toujours d'envoyer un paramètre d'événement. Essayer:
self.entry_1.bind("<Return>", lambda event: self.calculate(self.buttonOut_1.grid_info(), 1))
Vous acceptez le paramètre et ne l'utilisez jamais.
la source
Parce que c'est une définition de fonction et qu'elle a besoin de savoir quels paramètres la fonction accepte, et dans quel ordre. Il ne peut pas simplement regarder l'expression et utiliser les noms de variables, parce que certains de ces noms pour lesquels vous voudrez peut-être utiliser des valeurs de variables locales ou globales existantes, et même s'il le faisait, il ne saurait dans quel ordre devrait s'attendre à les obtenir.
Votre message d'erreur signifie que Tk appelle votre lambda avec un argument, tandis que votre lambda est écrit pour n'accepter aucun argument. Si vous n'avez pas besoin de l'argument, acceptez-en un et ne l'utilisez pas. ( Demosthenex a le code , je l'aurais posté mais j'ai été battu.)
la source
Vous pouvez en fait dans certaines situations (lorsque vous n'avez qu'un seul argument) ne pas mettre les x et y avant ":".
>>> flist = [] >>> for i in range(3): ... flist.append(lambda : i)
mais le i dans le lambda sera lié par son nom, donc,
>>> flist[0]() 2 >>> flist[2]() 2 >>>
différent de ce que vous pourriez souhaiter.
la source