python - labmda и functools.partial - что и когда использовать - какая разница (отличие)

вот две строки - и в первой и во второй мы передаём в функцию перед вызовом конкретные параметры (аргументы):

#ac.triggered.connect(functools.partial(FormWidget.show_message, self, textbox.toPlainText()))
 ac.triggered.connect(lambda: FormWidget.show_message (self, textbox.toPlainText()))

Одно из отличий важных на практике (проявляется когда в качестве аргумента передана переменная, значение которой в ходе выполнения может изменяться):

  1. labmda - произведёт вызов функции с последним значением параметра (то есть условно говоря код будет выполнен только в момент реального обращения (скажем будет передано текст из поля ввода в том виде, в котором он находился на момент нажатия на кнопку отправки))
  2. partial - "железно" привяжет к функции то значение переменной которое оказалось в момент прочтения интерпретатором строки с partial (то есть - дял примера с текстовым полем - значение окажется таким - каким оно было на момент инициализации - то есть всегда одинаковым)

то есть для рассмотренного примера надо использовать lambda:

вот так =)