Python Language
Частичные функции
Поиск…
Вступление
Поскольку вы, вероятно, знаете, пришли ли вы из школы ООП, специализируясь на абстрактном классе и используете его, вам следует помнить при написании кода.
Что делать, если вы можете определить абстрактную функцию и специализироваться на ее создании? Думает, что это своего рода функция 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- параметры и определили три различные функции.
Не нужно использовать абстрактную функцию, определенную выше (вы можете сделать ее закрытой ), но вы можете использовать частично прикладные функции для решения вопроса о повышении числа до фиксированного значения.