也说Functional Programming

        看了Lu Feng兄写的4个程序员的一天以及很多朋友对此post的回复,不禁让我兴奋不已。因为我想起了Python,毕竟在Functional Programming方面又怎么能少了Python这条可爱的小蟒蛇呢?
        偶没有Lu Feng兄那么强的表达能力,能够将语言的特性如讲故事一般娓娓道来,只能随手写两行代码来展示一下Python在Functional Programming方面的功底了。:)
        首先,在Python中,Everything is object,所以function本身也是object,是当作一等公民(First class citizen)来对待的,也就是说一个函数本身可以作为另外一个函数的参数,也可以接受另外一个函数作为自己的参数是 不是有点不分你我,人人平等的感觉呢?呵呵~~ 从Python有很多内建函数都可以看出其对于Functional Programming的支持。我们先来看一个例子:内建的filter函数。filter函数的作用是将一个序列(如List,String等)中符合要求的元素挑出来,那么这个要求通过什么来体现呢?就是通过一个返回布尔型的函数了,也就是说filter函数的其中一个参数是函数。filter函数的signature是filter (function, sequence),请看以下代码:

None.gif >>> name = 'perhaps'
None.gif
>>> def f(x): return x > 'a' and x < 'p'
None.gifdot.gif
None.gif
>>>  filter(f, name)
None.gif
'eh'
None.gif

除了filter之外,还有map和reduce,有兴趣的朋友,可以参阅Python Tutorial。

        接着,我们再来看看Lu Feng兄在post中提到的那个例子。Scheme的代码真的很简单,简单得让我这个Python的热衷者都汗颜了。不过,我倒是有个疑问。根据文中用Scheme写的Foo函数,我在Python中,一样可以模仿着定义出来的:
   
None.gif>>>  def Foo(op, x, y): op(x, y)
None.gif

是 不是也如Scheme一样简单呢?但是,问题来了,Foo函数在调用的时候,op函数是不是也应该已经一并定义出来了呢?也许是Scheme对于运算符有 很好的支持吧,所以在Scheme中,可以使用(+, 1, 2)这样的方式。如果op变得复杂,是不是仍然会是这样的简单呢?对Scheme了解,我就局限于它是黑客的第一门语言,因此不敢再作推断了。好,根据以 上Foo函数的定义,我们来看看在Python中,如何调用这个Foo函数吧:

None.gif>>> Foo(lambda x, y: x+y, 12 )
None.gif
>>> 3
None.gif
None.gif
>>> def f(x, y): return x* y
None.gifdot.gif
None.gif
>>> Foo(f, 36 )
None.gif
>>> 18

在以上的代码中,lambda会比较特别,它是用于定义匿名函数的。要在Python中用好Functional Programming,可少不了它哦。
         就说到这里了,对于Functional Programming有兴趣的朋友,可以看看这一篇文章:Functional Programming with Python 。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值