我试图在python2.6运行时上运行http://www.ibm.com/developerworks/linux/library/l-prog3.html中的这段代码。在
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)
好的,所以我从http://www.python.org/dev/peps/pep-0309/了解到functional被重命名为functools,curry被重命名为partial,但是仅仅重命名没有帮助。我得到了一个错误:
^{pr2}$下面的方法确实有用,但我真的要改变这么多吗?在
from functools import partial
taxcalc = lambda income,rate,deduct: (income-(deduct))*rate
taxCurry = partial(taxcalc)
taxCurry = partial(taxCurry, 50000)
taxCurry = partial(taxCurry, 0.30)
taxCurry = partial(taxCurry, 10000)
print "Curried taxes due =", taxCurry()
print "Curried expression taxes due =", \
taxcalc(50000, 0.30, 10000)
有没有更好的方法来保存原始示例的机制?最后,最初的例子是真正的流行还是只是部分应用?(根据http://www.uncarved.com/blog/not_currying.mrk)
谢谢你的时间
我想他们改变它的原因是因为Python是动态类型的。这意味着,如果出现任何错误,调试原始的
curry
代码将非常困难,这比Haskell这样的语言更难,因为在Haskell中,你会直接得到一个很好的类型错误。{cdthonic的决定看起来更合理。在您的示例也有点奇怪,因为您只是将部分应用的函数重新指定为相同的名称。通常,部分应用的功能将被赋予另一个功能。至少这是我能想到的Python中唯一合理的用例。在
^{} project 中
curry
的实现应该是一个插入式替换。在我写的an implementation of a curry decorator效果很好:
相关问题 更多 >
编程相关推荐