Понимание лямбда в 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 данный)

  • python перетащить файлы explorer в виджет ввода tkinter
  • Python ImportError: невозможно импортировать имя «_imagingtk» в virtualenv
  • Получение обратного вызова при изменении выбора списка Tkinter Listbox?
  • Проблема двойной реализации TK Framework
  • Многопоточность в Tkinter GUI, потоки в разных классах
  • Запуск цикла вместе с приложением Tkinter
  • Как заставить tkinter работать с установкой Ubuntu по умолчанию Python 2.7?
  • Tkinter: Как получить рамку в окне холста, чтобы расширить размер холста?
  • 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 >>> 

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

    Python - лучший язык программирования в мире.