Понимание лямбда в python и использование ее для передачи нескольких аргументов

Прочитав все, что я могу найти на лямбда, я до сих пор не понимаю, как заставить его делать то, что я хочу.

Каждый использует пример

lambda x, y : x + y 

Зачем вам нужно указать «x» и «y» перед «:»? Также как вы можете вернуть несколько аргументов?

например:

 self.buttonAdd_1 = Button(self, text='+', command=lambda : self.calculate(self.buttonOut_1.grid_info(), 1)) 

Это прекрасно работает. Но в следующем коде нет:

 self.entry_1.bind("<Return>", lambda : self.calculate(self.buttonOut_1.grid_info(), 1)) 

Это дает ошибку:

TypeError: () не принимает аргументов (1 данный)

4 Solutions collect form web for “Понимание лямбда в python и использование ее для передачи нескольких аргументов”

Зачем вам нужно указать «x» и «y» перед «:»?

Поскольку лямбда (концептуально) такая же, как функция, просто написана в строке. Ваш пример эквивалентен

 def f(x, y) : return x + y 

просто не привязывая его к имени типа f .

Также как вы можете вернуть несколько аргументов?

Точно так же, как с функцией. Предпочтительно, вы возвращаете кортеж:

 lambda x, y: (x+y, xy) 

Или список, или класс, или что-то еще.

self.entry_1.bind должен ответить на вещь с self.entry_1.bind .

Я считаю, что bind всегда пытается отправить параметр события. Пытаться:

 self.entry_1.bind("<Return>", lambda event: self.calculate(self.buttonOut_1.grid_info(), 1)) 

Вы принимаете параметр и никогда не используете его.

Зачем вам нужно указать «x» и «y» перед «:»?

Потому что это определение функции, и ему нужно знать, какие параметры принимает функция, и в каком порядке. Он не может просто взглянуть на выражение и использовать имена переменных в этом, потому что некоторые из этих имен вы можете использовать существующие локальные или глобальные значения переменных, и даже если бы это произошло, он не знал бы, должны ожидать получить их.

Ваше сообщение об ошибке означает, что Tk вызывает вашу лямбда с одним аргументом, в то время как ваша лямбда написана, чтобы не принимать аргументы. Если вам не нужен аргумент, просто примите его и не используйте. (Демосфенокс имеет код, я бы разместил его, но был избит.)

Зачем вам нужно указать «x» и «y» перед «:»?

Фактически вы можете в некоторых ситуациях (когда у вас есть только один аргумент) не ставьте x и y перед «:».

 >>> flist = [] >>> for i in range(3): ... flist.append(lambda : i) 

но я в лямбде будет связан по имени, поэтому,

 >>> flist[0]() 2 >>> flist[2]() 2 >>> 

отличается от того, что вы можете пожелать.

  • Обновление GUI TKinter из расчета многопроцессорности
  • Как изменить цвет кнопки с помощью tkinter
  • Как обновить изображение на метке tkinter?
  • Ошибка Tcl_AsyncDelete Многопоточность Python
  • отключить ярлык клавиатуры tkinter
  • ImportError: нет модуля с именем «Tkinter»
  • Извлечь изображение JPEG из перенаправленного URL и отобразить его в окне графического интерфейса пользователя
  • Сортировка столбца дерева Tk
  • Как остановить выполнение программы Python в IDLE
  • Отображение квадратного Tkinter.Button's?
  • Получить содержимое виджета Tkinter Entry
  • Python - лучший язык программирования в мире.