python函数式编程

函数式编程:允许把函数本身作为参数传入另一个函数,还允许返回一个函数。

1.高阶函数

一个函数可以接收另一个函数作为参数,这种函数称为高阶函数

def add(x,y,f):

      return f(x) + f(y)

x = -5 、y = 6、  f = abs、  f(x) + f(y) = abs(-5) + abs(6) = 11

return 11

2.map/reduce

map函数:接收两个参数,一个是函数,一个是可迭代对象。map的作用是将传入的函数依次作用到序列的每个元素,并将结果作为迭代器返回

>>> def f(x):
...     return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]

reduce函数:接收两个参数,一个是函数,一个是可迭代对象。reduce的作用是将每一个元素的函数结果作用到下一个元素中

reduce(f,[x1,x2,x3,x4]) = f(f(f(x1,x2),x3),x4)

def prod(x,y):
      return x * y

print(reduce(prod,[1,3,5]))   #15

3.filter

filter函数用于过滤序列,同样接收函数和可迭代对象,将函数作用于每一个元素中,然后进行筛选

4.sorted

排序函数可以直接比较两个元素的大小

sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']

5.返回函数

函数嵌套函数时,将内部函数作为结果进行返回。内部函数可以引用外部函数的参数和局部变量。这种方式称为闭包。

返回函数不要引用任何循环变量,或者是变化的变量。函数的返回值不是立即执行,而是在调用之后才开始执行。若要使用循环变量,则需要再创建新的函数,将该变量作为参数传入。

6.匿名函数

lambda x : x * x   =    def f(x):

                                        return x * x

也可以先将匿名函数赋值给变量,再调用该变量。

7.装饰器

在代码动态运行期间动态增加功能,被称为装饰器(就是用一个透明的大函数包裹起来,在程序运行时调用这个函数)

#定义

def log(func):

      def wrapper(*args,**kw):

            print('call %s():' % func.__name__)  #两横

            return func(* args,**kw)

      return wrapper

@log                                  =                 now = log(now)

def   now():

        print('2018-12-11')

#调用

now()

#输出

call  now():

2018-12-11

8.偏函数

偏函数位于functools的模块中,名称为partial。作用为将一个函数的某些参数给固定住,返回一个新的函数,从而增强作用。

原文地址:https://www.cnblogs.com/bkyf/p/10102953.html