Частичные функции модуля functools Python

В этом руководстве вы узнаете о частичных функциях Python и о том, как определять частичные функции с помощью частичной функции из модуля functools.

Содержание

Что такое частичные функции в 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), частичная функция не меняется.

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *