欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

也说Functional Programming PythonSchemeF# 

程序员文章站 2024-01-11 11:33:16
...
        看了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),请看以下代码:

也说Functional Programming
            
    
    
        PythonSchemeF# >>> name = 'perhaps'
也说Functional Programming
            
    
    
        PythonSchemeF# 
>>> def f(x): return x > 'a' and x < 'p'
也说Functional Programming
            
    
    
        PythonSchemeF# 也说Functional Programming
            
    
    
        PythonSchemeF# 
也说Functional Programming
            
    
    
        PythonSchemeF# 
>>> filter(f, name)
也说Functional Programming
            
    
    
        PythonSchemeF# 
'eh'
也说Functional Programming
            
    
    
        PythonSchemeF# 

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

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

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

也说Functional Programming
            
    
    
        PythonSchemeF# >>> Foo(lambda x, y: x+y, 12)
也说Functional Programming
            
    
    
        PythonSchemeF# 
>>> 3
也说Functional Programming
            
    
    
        PythonSchemeF# 
也说Functional Programming
            
    
    
        PythonSchemeF# 
>>> def f(x, y): return x*y
也说Functional Programming
            
    
    
        PythonSchemeF# 也说Functional Programming
            
    
    
        PythonSchemeF# 
也说Functional Programming
            
    
    
        PythonSchemeF# 
>>> Foo(f, 36)
也说Functional Programming
            
    
    
        PythonSchemeF# 
>>> 18

在以上的代码中,lambda会比较特别,它是用于定义匿名函数的。要在Python中用好Functional Programming,可少不了它哦。
         就说到这里了,对于Functional Programming有兴趣的朋友,可以看看这一篇文章:Functional Programming with Python 。
相关标签: Python Scheme F#