Частичные функции
Используйте functools.partial
«Частичные функции» — бесплатный урок Python Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Что такое частичное применение
functools.partial создаёт новую функцию, у которой некоторые аргументы существующей функции уже заданы. Это похоже на предварительную загрузку аргументов: получившуюся функцию можно вызывать с меньшим числом аргументов.
Импортируйте её с помощью from functools import partial.
from functools import partial
def power(base, exp):
return base ** exp
square = partial(power, exp=2)
print(square(5))Фиксация позиционных аргументов
Позиционные аргументы, переданные в partial, заполняют параметры функции слева направо. Оставшиеся аргументы передаются при вызове частично применённой функции.
from functools import partial
def multiply(a, b):
return a * b
double = partial(multiply, 2)
print(double(10))
print(double(50))Фиксация именованных аргументов
Именованные аргументы, переданные в partial, становятся значениями по умолчанию, которые всё ещё можно переопределить во время вызова.
from functools import partial
def greet(name, greeting='Hello'):
return greeting + ', ' + name
hola = partial(greet, greeting='Hola')
print(hola('Ada'))
print(hola('Bob', greeting='Hey'))Частичное применение встроенных функций
Частично применять можно и встроенные функции. Здесь из int создаётся анализатор целых чисел в двоичной системе.
from functools import partial
binary = partial(int, base=2)
print(binary('1010'))
print(binary('1111'))Более понятные функции обратного вызова
Частично применённые функции отлично подходят для функций обратного вызова, когда требуется передать функцию без аргументов или с одним аргументом, но предварительно загрузить контекст.
from functools import partial
def log(level, message):
return '[' + level + '] ' + message
error = partial(log, 'ERROR')
print(error('disk full'))Частичное применение в отображении
Частично применённая функция хорошо подходит для функций высшего порядка, таких как map: один аргумент фиксируется, а другой меняется для каждого элемента.
from functools import partial
def add(a, b):
return a + b
add10 = partial(add, 10)
print(list(map(add10, [1, 2, 3])))Проверка частично применённой функции
Объект частично применённой функции предоставляет обёрнутую функцию через .func, зафиксированные позиционные аргументы через .args, а зафиксированные именованные аргументы — через .keywords.
from functools import partial
def f(a, b, c):
return (a, b, c)
p = partial(f, 1, c=3)
print(p.func.__name__)
print(p.args)
print(p.keywords)Объединение частично применённых функций
Можно создать частично применённую функцию на основе другой, добавляя зафиксированные аргументы шаг за шагом.
from functools import partial
def volume(l, w, h):
return l * w * h
base = partial(volume, 2)
slab = partial(base, 3)
print(slab(4))Частичное применение и лямбда-функция
lambda может выполнять ту же задачу, но partial часто понятнее для фиксации аргументов и предоставляет доступ к обёрнутой функции для интроспекции.
from functools import partial
def power(base, exp):
return base ** exp
cube_p = partial(power, exp=3)
cube_l = lambda b: power(b, 3)
print(cube_p(2), cube_l(2))Практический пример: округление
Создайте функцию округления до двух знаков после запятой, частично применив встроенную функцию round.
from functools import partial
round2 = partial(round, ndigits=2)
print(round2(3.14159))
print(round2(2.71828))Частично применённые методы для классов
Связанная с ней функция functools.partialmethod выполняет то же самое для методов внутри определения класса, предварительно заполняя аргументы метода.
from functools import partialmethod
class Light:
def set(self, state):
self.state = state
return state
on = partialmethod(set, True)
off = partialmethod(set, False)
l = Light()
print(l.on())
print(l.off())Быстрая проверка
Что делает functools.partial?
Повторение: частично применённые функции
Вы узнали, что functools.partial:
- Создаёт новую функцию с предварительно заданными аргументами (позиционными или именованными).
- Позволяет переопределять заданные по умолчанию именованные аргументы во время вызова.
- Идеально подходит для функций обратного вызова,
mapи сокращения повторяющегося кода. - Предоставляет атрибуты
.func,.args,.keywordsи имеет вариант для методов —partialmethod.
from functools import partial
add = lambda a, b: a + b
plus1 = partial(add, 1)
print(plus1(41))Часто задаваемые вопросы
Урок «Частичные функции» бесплатный?
Да — полный текст урока «Частичные функции» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «Частичные функции»?
Используйте functools.partial Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Частичные функции»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Функции первого класса
- Замыкания и свободные переменные
- nonlocal и изменяемое состояние
- Частичные функции