Введение в язык Питон


Функции высшего порядка: частичное вычисление функций - карринг (currying) - часть 3


      657

Приведем еще один пример, подтверждающий, что между каррингом и замыканием много общего. Для  этого,  используя curry(), перепишем простую программу расчета налога, код которой можно найти в предыдущей статье:

    #------------ Python curried tax calculations -----------#

          from functional import *

          taxcalc = lambda income,rate,deduct: (income-(deduct))*rate

          taxCurry = curry(taxcalc)

          taxCurry = taxCurry(50000)

          taxCurry = taxCurry(0.30)

          taxCurry = taxCurry(10000)

          print "Curried taxes due =",taxCurry

          print "Curried expression taxes due =", \

                curry(taxcalc)(50000)(0.30)(10000)

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

Обратите внимание на второй оператор print

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




Начало  Назад  Вперед



Книжный магазин