Python学习7-函数式编程

来源:互联网 发布:暗黑破坏神2 知乎 编辑:程序博客网 时间:2024/06/05 08:25

转自廖雪峰的讲义

  在程序设计中,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数是面向过程程序设计的基本单元。

  函数式编程就是一种抽象程度很高的编程范式,它允许把函数本身作为参数传入另一个函数,还允许返回一个函数。


高阶函数:

  考虑到Python中,变量可以指向函数,函数的参数也能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

一个简单的高阶函数:

def add(x, y, f):
    return f(x) + f(y)

add(-5, 6, abs)


map / reduce:

  map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

def f(x):

  return x * x

map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])

[1, 4, 9, 16, 25, 36, 49, 64, 81]


def normalize(name):  
   name=name[0].upper()+name[1:].lower()  
   return name  
L1 = ['adam', 'LISA', 'barT']  
L2 = list(map(normalize, L1))  
print(L2)  


使用高阶函数map(),我们可以将运算规则抽象,使得代码更加清晰易懂。

  reduce的输入是一个函数和一个序列[x1, x2, x3...],其中函数必须接收两个参数。reduce将结果依次和序列的下一个元素做累积计算。


filter:

  filter函数用于过滤序列。它接收一个函数和一个序列,并将函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

import math
def notPrime(n):
    if n <= 1:
        return  True
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return  True
    return  False

L = filter(notPrime, range(1, 101))
print(L)
print(len(L))


sort:

  在Python中规定,对于两个元素x和y,如果认为x < y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1。因此,排序算法就不用关心具体的比较过程,而是根据比较结果直接排序。


返回函数:

  高阶函数可以把函数作为结果值返回,等到调用函数时,才计算函数的结果。

简要了解了闭包的概念。


匿名函数:

  关键字lambda表示匿名函数,冒号前面的x表示函数参数。匿名函数只能有一个表达式,返回值就是该表达式的结果。

lambda x: x * x

等价于:

def f(x):
    return x * x


装饰器:

  装饰器(Decorator)可以在代码运行期间动态增强函数功能。


偏函数:

  使用偏函数可以设定函数参数的默认值,降低函数调用的复杂度。



0 0
原创粉丝点击