functools.partial
Для указанной функции возвращает объект, поддерживающий вызов, частично применяющий к функции указанные аргументы.
functools.partial(func[,*args][, **kwargs])
-> partial-объект
func -- Функция, к которой требуется частично применить аргументы.
*args -- Позиционные аргументы, которые требуется применить к функции func.
**kwargs -- Именованные аргументы, которые требуется применить к функции func.
*args -- Позиционные аргументы, которые требуется применить к функции func.
**kwargs -- Именованные аргументы, которые требуется применить к функции func.
Частичное (partial) применение некоторых аргументов, позволяет уменьшить арность функции (количество аргументов).
В итоге, на выходе мы получим объект с упрощённой сигнатурой.
Возвращаемый функцией
Однако, есть и важные отличия:
Если при вызове partial-объекта используются позиционные аргументы, то они добавляются к перечисленным в
Если при вызове partial-объекта используются именованные аргументы, то они дополняют, либо заменяют перечисленные в
Атрибуты возвращаемого 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, каррирование
На заметку
У нас есть представительство во ВКонтакте. Ссылка в самом низу страницы.