0Pricing
Python Academy · Урок

Частичные функции

Используйте 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 — локальная установка не требуется.

Все уроки этого курса

  1. Функции первого класса
  2. Замыкания и свободные переменные
  3. nonlocal и изменяемое состояние
  4. Частичные функции
← Назад к Python Academy