函数式编程:mmutable),都由纯函数(pure function)的形式组成。这里的纯函数,是指函数本身相互独立、互不影响,对于相同的输入,总会有相同的输出,没有任何副作用。

匿名函数

在python中的匿名函数就是lambda表达式
lambda是一种表达式而并非一种语句,可以用在列表里或者做为函数的参数

定义方式

lambda 形参1,形参2 : 返回值

调用方式

  1. f = lambda 形参1,形参2 : 返回值
  2. print(f(1,2))

对比普通函数

  1. def add(x,y):
  2. return x+y
  3. print(add(1,2))
  4. f = lambda x,y: x+y
  5. print(f(1,2))

Map与函数式编程

  1. #Map与函数式编程
  2. 函数 map(function, iterable) 的第一个参数是函数对象,第二个参数是一个可以遍历的集合,它表示对 iterable 的每一个元素,
  3. 都运用 function 这个函数。
  4. list_x = [1, 2, 3, 4, 5]
  5. # 定义一个返回平方数的函数
  6. f = lambda x: x * x
  7. # 使用map把list_x的数每一个放入f函数中并且映射到原来list_x的原本元素位置
  8. list_result = map(f, list_x)
  9. # lambda简写
  10. list_result = map(lambda x: x * x, list_x)
  11. # list_result本身为一个对象,需要进行list()方法转化为列表输出
  12. print(list(list_result))
  13. # map函数后队两个进行操作
  14. list_z = [1, 2, 3, 4, 5]
  15. list_y = [2, 3, 4, 5, 6, 7]
  16. # 注意 如果两个列表的元素个数不相等,最后的结果列表里的元素个数为形参里元素最少的列表的元素个数
  17. list_result = map(lambda x, y: x * y, list_z, list_y)
  18. print(list(list_result))

Reduce与函数式编程

Reduce为连续计算方法,

  1. from functools import reduce
  2. list_x= [1, 2, 3, 4, 5]
  3. '''
  4. reduce方法里面的第一个参数函数必须有两个形参
  5. 计算的方式
  6. 将序列中第一个和第二个值通过放入函数计算得到结果,再将结果作为函数的第一个形参,序列中的第三个值作为第二个形参进行计算。。。。
  7. 在本案例中计算的方式为 (((1+2)+3)+4)+5
  8. '''
  9. list_result=reduce(lambda x,y: x+y,list_x)
  10. print(list_result) #15

注意使用reduce前需要导入functools包

Filter与函数编程

filter(function, iterable) 函数,function 同样表示一个函数对象。filter() 函数表示对 iterable 中的每个元素,都使用 function 判断,并返回 True 或者 False,最后将返回 True 的元素组成一个新的可遍历的集合,不能直接打印要。

  1. # 求偶数
  2. list_number=[1,2,3,4,5,6]
  3. list_odd=filter(lambda x:x%2==0, list_number)
  4. for k in list_odd:
  5. print(k)