体验Python函数式编程

    技术2022-05-11  90

    在函数式编程里面, 我们可以定义匿名函数,也可以把函数赋值给一个变量或作为参数传递给另外一个函数,Python语言很早就支持函数式编程,我们可以用lambda关键字定义一个匿名函数,然后赋值给一个变量,如下所示: >>> f=lambda(n):n**2 >>> f(6) 36>>> f=lambda(n):lambda(m):n*m>>> g=f(5) #相当与g=lambda(m):5*m>>> g(9) #相当于5*945lambda定义的匿名函数可以引用外围函数的变量,上面的代码中,第二个lambda表达式定义的匿名函数引用了第一个匿名函数的参数n,因为第一个匿名函数是第二个匿名函数的外围函数。
    除了lambda表达式之外,python还支持将函数作为参数传递给另外一个函数,有点类似于C语言中的函数指针,python语言内建的函数filter,map,reduce就可以接受函数参数。 filter(function, sequence)会遍历sequence中的每一个item,并以该item为参数调用function,如果function返回ture,就将该item加到结果sequence中,这就达到过滤sequence的效果,作为参数的function就是过滤的条件,例子如下: >>> a=range(1,10) >>> filter(lambda(n):n%2==0,a) [2, 4, 6, 8] 这里用lambda定义的匿名函数来定义过滤条件,在list a中返回是偶数的items map(function, sequence)也是遍历sequence中的每一个item,并以该item为参数调用function,然后将执行结果添加到最终的结果sequence中,例子如下: >>> b=range(1,10) >>> map(lambda(n):n**2,b) [1, 4, 9, 16, 25, 36, 49, 64, 81] reduce(function, sequence)先把sequence中的头两个item作为参数传给function,将function的运行结果跟第三个item作为参数再次传给function,直至遍历完sequence,最后把单个值返回,例子如下:>>> def add(x,y):    return x+y>>> reduce(add,range(1,10))45

    最新回复(0)