Предположим есть функция, которая берет много параметров, а первый параметр - имя класса формы (в джанго)
def cool_staff(form_class, inits, defaults, user, other_param):
# много строчек кода
и вы вдруг обнаруживаете что в вашем коде куча вызовов, у которых первый параметр одинаков.
...
res = cool_staff(form_class=MainForm, inits={a:1, b:3}, defaults=[1,2,3], ...)
...
res = cool_staff(form_class=MainForm, inits={a:100500, b:42}, defaults=[3,2,1], ...)
...
Тогда делаете так:
main_cool_staff = lambda **kwargs: cool_staff(form_class=MainForm, **kwargs)
и ваши вызовы упрощаются
...
res = main_cool_staff(inits={a:1, b:3}, defaults=[1,2,3], ...)
...
res = main_cool_staff(inits={a:100500, b:42}, defaults=[3,2,1], ...)
...
было в реальном проекте.
UPD. Такая форма карринга не сработает для неименованных параметров
main_cool_staff = lambda *args, **kwargs: cool_staff(form_class=MainForm, *args, **kwargs)
поэтому используйте всегда именованные параметры, это хороший стиль.
UPD2. Еще подсказали вариант
import functools
main_cool_staff = functools.partial(cool_staff, MainForm)
работает и с неименованными параметрами. Спасибо
Андрей Дугин