добавить базу данных в ядро ​​ASP.net

Параметр command ссылается на функцию, которая является причудливым способом сказать, что вам нужно передать ей имя функции. Когда вы выполняете button('hey'), вы вызываете функцию button, , и результат этого присваивается опции command .

Чтобы передать ссылку, вы должны использовать только имя, не используя круглые скобки или аргументы. Например:

b = Button(... command = button)

Если вы хотите передать такой параметр, как «hey», вы должны использовать небольшой дополнительный код:

  • Вы можете создать промежуточную функцию, которая может быть вызван без вашего аргумента и затем вызывает вашу функцию button,
  • Вы можете использовать lambda, чтобы создать то, что называется анонимной функцией . Во всех отношениях это функция, за исключением того, что у нее нет имени. Когда вы вызываете команду lambda, она возвращает ссылку на созданную функцию, что означает, что она может использоваться для значения параметра command для кнопки.
  • Вы можете использовать functools.partial

Для меня lambda является самым простым, поскольку он не требует каких-либо дополнительных импортов, таких как functools.partial, хотя некоторые люди думают, что functools.partial легче понять.

Чтобы создать функцию лямбда, которая вызывает вашу функцию button с аргументом, вы сделали бы что-то вроде этого:

lambda: button('hey')

Вы получаете функцию, функционально эквивалентную:

def some_name():
    button('hey')

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

b = Button(... command = lambda: button('hey'))

На этом сайте есть вопрос, который содержит много интересных комментариев о лямбда , в целом. См. Вопрос Почему Python lambdas полезны? . В этом же обсуждении был ответ, в котором показано, как использовать лямбда в петле , когда вам нужно передать переменную в обратный вызов.

Наконец, см. раздел Tkinter Callbacks на effbot.org для хорошего учебника. Охват лямбда довольно скудный, но информация там может быть полезной.

-1
задан jeffrey pernia 14 July 2018 в 00:41
поделиться