Функция partial() в Python
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Основы «Python»
Комментариев: 0

В этом уроке рассмотрим функцию partial() из модуля functools. Эта функция возвращает новый объект, который при вызове будет вести себя так же, как функция func с позиционными аргументами *args и ключевыми аргументами *keywords.

Синтаксис:

import functools

new_func = functools.partial(func, /, *args, **keywords)

Аргументы:

  • func - любой вызываемый объект, функция, класс.
  • *args - позиционные аргументы func,
  • *keywords - ключевые аргументы func.

Если вызываемой функции передается больше аргументом, чем определенно в функции, то они добавляется к args. Если предоставляются дополнительные аргументы ключевого слова, они расширяются и переопределяют список аргументов ключевого слова функции.

Функция partial() используется для частичного применения некоторых аргументов к вызываемой функции func. Другими словами, partial() «замораживает» часть аргументов и/или ключевых слов, поэтому новый объект создается с упрощенной регистрацией аргументов функции, называемой func.

Например, его можно использовать для создания вызываемого объекта, который ведет себя как функция int(), где базовый аргумент по умолчанию равен 3:

Пример:

from functools import partial

basetwo = partial(int, base=3)

basetwo.__doc__ = 'Convert base 3 string to an int.'

print(basetwo('10010'))

Результат: 84

Объект partial() имеет три атрибута только для чтения:

  • partial.func - атрибут возвращает исходную функцию, переданную в качестве первого аргумента в partial(). Другими словами, вызовы перенаправляются на исходную функцию func с новыми аргументами и ключевыми словами.
  • partial.args - атрибут возвращает крайние левые позиционные аргументы, используемые для вызова исходной функции func.
  • partial.keywords - атрибут возвращает ключевые аргументы, используемые для вызова исходной функции func.

Пример:

from functools import partial


# Создаем функцию с 3 переменными
def person(name, age, sep='!'):
    print(name, age, sep)


person('Владислав', 23, '.')

# Замораживаем 3 аргумент
new_person = partial(person, name='Владислав', age=24)

new_person()

# Атрибут 'args' объекта 'new_person'
print(new_person.args)

# Атрибут 'keywords' объекта 'new_person'
print(new_person.keywords)

# Атрибут 'func' объекта 'new_person' передает вызов исходной функции "person(name, age, sep='!')"
new_person.func('Владислав', 25, '!')

Результат:

>>> Владислав 23 .
>>> Владислав 24 !
>>> ()
>>> {'name': 'Владислав', 'age': 24}
>>> Владислав 25 !
Теги записи: Python, Основы Python, partial(),
Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)