浅析Python函数式编程

  

函数式编程,函数式编程.Python对函数式编程提供部分支持。对于纯函数编程,对任一函数,只要输入是确定的,输出就是确定的,可称之为无副作用。

  

一、高阶函数
  

  

<强> 1,变量指向函数
  

  

我们知道函数的计算结果可以赋值给变量,例如x=abs (5)。
  

  

同理,变量也可以指向函数,例如f=abs。
  

  

如果一个变量指向了一个函数,那我们直接调用abs (x)与执行f (x)返回的结果是完全相同。

  

<强> 2,函数名也是变量
  

  

我们也可以把函数名看成是一个变量,例如abs()函数。执行语句abs=5,之后调用abs(5)就会报错,因为此时abs这个变量已经不指向绝对值函数了,而是指向一个整数5 .

  

<强> 3,函数作为形参
  

  

既然变量可以指向函数,函数也可以充当变量,那么一个函数就可以接收另外一个函数作为它自己的形式参数,即实现高阶函数例。如:

        在在在def添加(x, y, f): #把函数作为参数传入。      …返回f (x) + f (y)      在在在添加(5、2、abs)      7      

二、函数式编程的内建函数
  

  

<强> 1,地图(func seq)
  

  

语法:地图(func seq),接收两个参数,一个是函数函数,一个是可迭代对象。

  

作用:将传入的func函数循环作用于seq序列的每个元素上,并返回新的可迭代对象。

  

注意:地图()函数返回的是一个& lt;地图object>,我们可以使用列表()函数将所获得的结果以列表形式返回。

  

举个栗子:用地图()实现f (x)=x * x

        在在在def f (x):      …返回x *      …      在在在地图(f [1、2、3、4、5))      & lt;在0 x0327f670>映射对象;      在在在列表(地图(f[1、2、3、4、5))) #传入的函数f作用于序列的每个元素调并用列表()      (1、4、9、16、25)      

当然还可以使用其他方法实现:
  

  

exp1:列表(地图((λx: x * x) (1、2、3、4、5)))
  

  

exp2: [x * x x [1、2、3、4、5]]

  

<强> 2,减少(函数、列表)
  

  

语法:减少(函数、列表),必须接受两个参数。

  

作用:把func函数作用在列序列上(x1, x2, x3,…)。取出序列的头两个元素x1和x2,作用于函数,取的一个单一的值,例如,再将一个与序列的下一个元素x3做func运算,依此反复。其效果就相当于减少(f, x1, x2, x3)=f (f (x1, x2), x3)

  

注意:使用减少(),必须导入模块从functools进口减少

  

大家可以自己找个栗子玩玩哈~ ~ ~

  

<强> 3,过滤()
  

  

语法:过滤器(func(序列]),接收一个“过滤”函数,和一个序列。返回的是一个迭代器可迭代对象。

  

作用:按照func规则过滤序列,过滤器()把传入的函数func依此作用于每个元素,然后根据返回值TrueorFalse,来保留为真正的对应元素。

  

注意:跟地图()类似,过滤器()返回的是一个可迭代对象,故需要使用列表()来查看所获得结果并返回列表类型。

  

举个栗子:在一个列表中,删除偶数,保留奇数。

        在在在def is_odd (n):      …返回n % 2==1 #返回0(假)或1(真正的)      …      在在在列表(过滤器(is_odd [1, 2, 3, 4, 5, 6, 7, 8, 9)))      (1、3、5、7、9]      

浅析Python函数式编程