Частичные функции модуля functools Python
В этом руководстве вы узнаете о частичных функциях Python и о том, как определять частичные функции с помощью частичной функции из модуля functools.
- Что такое частичные функции в Python?
- Частичная функция Python из модуля functools
- Частичные функции и переменные Python
Что такое частичные функции в Python?
В следующем примере определяется функция, которая умножает два аргумента:
def multiply(a, b): return a*b
Иногда вам просто нужно умножить аргумент на указанное число, например, 2. Чтобы сделать это, вы можете повторно использовать функцию умножения следующим образом:
def double(a): return multiply(a,2)
Функция double возвращает функцию умножения. Она передала число 2 второму аргументу функции умножения.
Ниже показано, как использовать функцию double:
result = double(10) print(result)
Соединим все вместе:
def multiply(a, b): return a*b def double(a): return multiply(a, 2) result = double(10) print(result) # 20
Как видите, функция double уменьшает аргументы функции multipt.
Функция double замораживает второй аргумент функции multiple, что приводит к созданию новой функции с более простой сигнатурой. Другими словами, двойная функция снижает сложность функции умножения.
В Python двойная функция называется частичной функцией. На практике частичные функции используются, когда требуется сократить количество аргументов функции, чтобы упростить ее сигнатуру.
Поскольку иногда вам придется создавать частичные функции, Python предоставляет вам частичную функцию из стандартного модуля functools, чтобы помочь вам легче определять частичные функции.
Частичная функция Python из модуля functools
Ниже показан синтаксис частичной функции partial из модуля functools:
functools.partial(fn, /, *args, **kwargs)
Функция partial возвращает новый частичный объект, который является вызываемым.
При вызове частичного объекта Python вызывает функцию fn с позиционными аргументами args и ключевыми аргументами kwargs.
В следующем примере показано, как использовать частичную функцию для определения двойной функции из функции умножения:
from functools import partial def multiply(a, b): return a*b double = partial(multiply, b=2) result = double(10) print(result)
Выход:
20
Как это работает.
- Сначала импортируйте функцию partial из модуля functools.
- Во-вторых, определите функцию умножения.
- В-третьих, верните частичный объект из частичной функции и присвойте его переменной double.
При вызове функции double Python вызывает функцию умножения, где аргумент b по умолчанию равен 2.
Если вы передаете больше аргументов частичному объекту, Python добавляет их к аргументу args. Когда вы передаете дополнительные ключевые аргументы частичному объекту, Python расширяет и переопределяет аргументы kwargs.
Поэтому можно вызвать двойника следующим образом:
double(10, b=3)
В этом примере Python вызовет функцию умножения, где значение аргумента b равно 3, а не 2.
И вы увидите следующий вывод:
30
Частичные функции и переменные Python
Иногда вам может понадобиться использовать переменные для создания партиалов. Например:
from functools import partial def multiply(a, b): return a*b x = 2 f = partial(multiply, x) result = f(10) # 20 print(result) x = 3 result = f(10) # 20 print(result)
В этом примере мы меняем x на 3 и ожидаем, что f(10) вернет 30 вместо 20.
Однако f(10) возвращает 20. Это происходит потому, что Python оценивает значение x в следующем операторе:
f = partial(multiply, x)
…но не после этого, поэтому, когда x ссылается на новое число(3), частичная функция не меняется.