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

Введение

Примеры

Поднять власть

Давайте предположим , что мы хотим возвести x в степень у.

Вы бы написали это как:

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

 

Что делать , если у значения может принимать конечное множество значений?

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

 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 Params , и мы определили три различные функции.

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

Синтаксис

Параметры

Примечания