WEB开发网
开发学院软件开发Python 可爱的 Python: 在 Python 中进行函数编程,第 3 ... 阅读

可爱的 Python: 在 Python 中进行函数编程,第 3 部分

 2008-11-13 13:19:33 来源:WEB开发网   
核心提示: 通过 第 2 部分(这次使用 curry() )中的税收计算程序的示例,可以进一步地和闭包进行比较: 清单 10:Python Curry 过的税收计算from functionalimport *taxcalc =lambda income,rate,deduct: (income-(d

通过 第 2 部分(这次使用 curry() )中的税收计算程序的示例,可以进一步地和闭包进行比较:

清单 10:Python Curry 过的税收计算

  
     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)
   

不像闭包,我们需要用一个特定的顺序(从左向右)来排列参数。但是要注意到 functional 也包含一个开始于另一端(从右向左)的 curry() 类。

在同一级别示例的第二个 print 声明与直接调用普通的 taxcalc(50000,0.30,10000) 仅在拼写上做了少许的改变。然而,在不同的级别上,它使得每一个函数可以只有一个参数的函数这一概念更加清楚 -- 刚一接触这种思想的人可能会感到很惊讶。

混合高阶函数

在 curring 的“基本”操作之外, functional 提供了一个有趣的高阶函数的掠夺包。而且,写自己的高阶函数(带或者不带 functional ) 的确不难。至少带有 functional 的高阶函数会提供一些很好的主意。

对于大部分人来说,高阶函数感觉起来就像是标准的 map() 、 filter() 和 reduce() 的“增强”版本。通常,这些函数的模式是概略地“把一个或多个函数和一些列表作为参数,然后应用这些函数列出参数。”关于这个题目有数量惊人的有趣和有用的方法。另一个模式是“获取函数集合,并创建一个合并这些函数功能的函数。”再次,可能有众多的变化,让我们看一下 functional 提供的东西。函数 sequential() 和 also() 都能够创建一个基于组件函数序列的函数。组件函数可以用相同的参数来调用。两者主要的不同之处在于 sequential() 期望一个单一列表作为参数,而 also() 使用一列参数。在多数情况下,这些对于函数方面的影响是很有用的,但是 sequential() 随意地让您挑选哪个函数提供组合返回值:

上一页  1 2 3 4 5 6 7  下一页

Tags:可爱 Python Python

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接