python函数式编程

什么是函数式编程(定义)

   函数式编程是一种编程范式,其思想接近数学计算,也就是说一个函数的值取决于参数的值而不依赖其他的状态.

为什么要函数式编程(优点)

1. 代码简洁,开发快速
  函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快

2. 接近自然语言,易于理解
  函数式编程的自由度很高,可以写出很接近自然语言的代码。

3. 更方便的代码管理
  函数式编程不依赖、也不会改变外界的状态,只要给定输入参数,返回的结果必定相同。因此,每一个函数都可以被看做独立单元,很有利于进行单元测试和除错,以及模块化组合。

4. 易于"并发编程"
  函数式编程不需要考虑"死锁",因为它不修改变量,所以根本不存在"锁"线程的问题。不必担心一个线程的数据,被另一个线程修改,所以可以很放心地把工作分摊到多个线程,部署"并发编程"。

如何函数式编程(技术)

lambda(匿名函数)

   例如要求一个数的平方,传统的方法我们会这样写:
def square(x):
    return x * x

print(square(3))
如果使用匿名函数:
s = lambda x: x * x
print s(3)
   关键字lambda表示匿名函数,冒号前面的x表示函数参数。只能有一个表达式,返回值就是该表达式的结果.优点是不用写函数名,避免冲突;缺点是只能做一些简单的处理.
     在Python中函数也是"一等公民",所以可以把函数赋给一个变量,也可以将一个函数作为返回值返回.
def calc(x, y):
    return lambda x, y: x * x + y * y

map

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

lst = [1, 2, 3, 4, 5, 6]
print(map(square, lst))
输出
[1, 4, 9, 16, 25, 36]

reduce

 reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
 例如求序列和:
lst = [1, 2, 3, 4, 5, 6]
print(reduce(lambda x, y: x + y, lst))
 再做个复杂一点的,把字符串转换成整数:
def char_2_int(s):
    return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]

str_num = '123456'
print(reduce(lambda x, y: x * 10 + y, map(char_2_int, str_num)))

filter

 filter()函数用于过滤序列。和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
 例如,保留一个1-100序列里的素数
def is_prime(n):
    if n <= 1:
        return False
    else:
        for i in range(2, n):
            if n % i == 0:
                return False
        return True

lst = [i for i in range(1, 101)]
print(filter(is_prime, lst))


你可能感兴趣的:(python)