Для указанной функции возвращает объект, поддерживающий вызов, частично применяющий к функции указанные аргументы.
functools.partial(func[,*args][, **kwargs])
-> partial-объект
func -- Функция, к которой требуется частично применить аргументы.

*args -- Позиционные аргументы, которые требуется применить к функции func.

**kwargs -- Именованные аргументы, которые требуется применить к функции func.

Частичное (partial) применение некоторых аргументов, позволяет уменьшить арность функции (количество аргументов).
В итоге, на выходе мы получим объект с упрощённой сигнатурой.

    from functools import partial


def count_animals(number, kind, adjective='big'):
print('%s %s %s' % (number, adjective, kind))


count_cats = partial(count_animals, kind='cats')
count_cats() # TypeError: count_animals() takes exactly 2 arguments (1 given)
count_cats(12) # 12 big cats
count_cats(13, kind='kittens') # 13 big kittens
count_cats.keywords # {'kind': 'cats'}

ten_huge_cats = partial(count_cats, 10, adjective='huge')
ten_huge_cats() # 10 huge cats

Возвращаемый функцией partial объект весьма похож на функцию: поддерживает вызов, слабые ссылки на себя и может иметь атрибуты.

Однако, есть и важные отличия:
  • для него не создаются автоматически атрибуты __name__ и __doc__;
  • объявленные в рамках классов partial-объекты ведут себя как статические методы, т.е. не преобразуются в связанные методы в процессе разрешения атрибутов класса.

Если при вызове partial-объекта используются позиционные аргументы, то они добавляются к перечисленным в args.
Если при вызове partial-объекта используются именованные аргументы, то они дополняют, либо заменяют перечисленные в kwargs.

На заметку
Отличие от каррирования: объект с частично применёнными аргументами возвращает результат функции, а не функцию в цепочке каррирования.

Атрибуты возвращаемого partial-объекта

funcФункция, к которой будет перенаправлен вызов с применением аргументов.
argsПозиционные аргументы, которые будут переданы в вызываемую функцию при вызове объекта.
keywordsИменованные аргументы, которые будут переданы в вызываемую функцию при вызове объекта.

Синонимы поиска: functools.partial, functools, partial, каррирование
На заметку
Зарегистрированные пользователи могут получать еженедельный дайджест обновлений на сайте.