python - labmda и functools.partial - что и когда использовать - какая разница (отличие)
Primary tabs
вот две строки - и в первой и во второй мы передаём в функцию перед вызовом конкретные параметры (аргументы):
#ac.triggered.connect(functools.partial(FormWidget.show_message, self, textbox.toPlainText())) ac.triggered.connect(lambda: FormWidget.show_message (self, textbox.toPlainText()))
Одно из отличий важных на практике (проявляется когда в качестве аргумента передана переменная, значение которой в ходе выполнения может изменяться):
- labmda - произведёт вызов функции с последним значением параметра (то есть условно говоря код будет выполнен только в момент реального обращения (скажем будет передано текст из поля ввода в том виде, в котором он находился на момент нажатия на кнопку отправки))
- partial - "железно" привяжет к функции то значение переменной которое оказалось в момент прочтения интерпретатором строки с partial (то есть - дял примера с текстовым полем - значение окажется таким - каким оно было на момент инициализации - то есть всегда одинаковым)
то есть для рассмотренного примера надо использовать lambda:
вот так =)
- Log in to post comments
- 2781 reads