Как использовать `functools.partial` в Python для частичного применения функций?

«Как использовать `functools.partial` в Python для частичного применения функций?» — вопрос из категории Библиотеки и модули, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Модуль functools.partial в Python используется для частичного применения функций. Это означает создание новой функции, в которой некоторые аргументы исходной функции уже зафиксированы.

Почему это полезно? partial позволяет упростить вызовы функций с часто повторяющимися аргументами, создавать специализированные версии функций и повышать читаемость кода. Это особенно удобно при работе с колбэками, обработчиками событий или в функциональном программировании, где требуется передать функцию с заранее определенными параметрами.

Пример использования:

from functools import partial

def multiply(x, y):
    """Умножает два числа."""
    return x * y

# Создаем новую функцию 'double', где x всегда равно 2
double = partial(multiply, 2)

print(double(5))  # Выведет 10 (2 * 5)
print(double(10)) # Выведет 20 (2 * 10)

# Можно фиксировать аргументы по имени
power_of_2 = partial(pow, exp=2)
print(power_of_2(3)) # Выведет 9 (3**2)

Ключевые особенности:

  • Фиксация аргументов: Аргументы фиксируются слева направо. Для фиксации аргументов по позиции, которые не являются первыми, или для фиксации аргументов по имени, используйте именованные аргументы.
  • Гибкость: partial может быть скомбинирован с *args и **kwargs для создания очень гибких функций.
  • Неизменность: Частичное применение не изменяет оригинальную функцию, а создает новую обертку.
  • Применение: Часто используется в качестве колбэков, при работе с API, где нужно зафиксировать часть параметров, или для адаптации функций к интерфейсам, ожидающим меньшее количество аргументов.