Поиск…


Вступление

Поскольку вы, вероятно, знаете, пришли ли вы из школы ООП, специализируясь на абстрактном классе и используете его, вам следует помнить при написании кода.

Что делать, если вы можете определить абстрактную функцию и специализироваться на ее создании? Думает, что это своего рода функция Inheritance, где вы связываете определенные параметры, чтобы сделать их надежными для конкретного сценария.

Синтаксис

  • partial (function, ** params_you_want_fix)

параметры

Param подробности
Икс номер, который должен быть поднят
Y экспонента
повышение функция, которая будет специализированной

замечания

Как указано в документе Python, functools.partial :

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

Проверьте эту ссылку, чтобы узнать, как частично можно реализовать.

Повысить мощность

Предположим, мы хотим поднять x на число y .

Вы должны написать это как:

def raise_power(x, y):
    return x**y

Что делать, если ваше значение y может принимать конечный набор значений?

Предположим, что y может быть одним из [3,4,5], и, допустим, вы не хотите предлагать конечным пользователям возможность использовать такую ​​функцию, поскольку она очень интенсивно вычисляется. Фактически, вы должны проверить, если при условии, что y принимает действительное значение и переписывает вашу функцию как:

def raise(x, y):
    if y in (3,4,5):
        return x**y
    raise NumberNotInRangeException("You should provide a valid exponent")

Беспорядочный? Давайте используем абстрактную форму и специализируемся на всех трех случаях: давайте их частично реализовать.

from functors import partial
raise_to_three = partial(raise, y=3)
raise_to_four = partial(raise, y=4)
raise_to_five = partial(raise, y=5)

Что здесь происходит? Мы зафиксировали y- параметры и определили три различные функции.

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



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow