python学习笔记学习笔记-函数式编程函数式编程-20200310
文章目录文章目录函数式编程高阶函数(Higher-order function)map/reducefilter用filter求素数exercisesorted-排序算法exercise返回函
数函数作为返回值闭包exercise匿名函数erercise小结装饰器定义使用示例exercise小结偏函数小结
函数式编程函数式编程
函数:面向过程的程序设计的基本单元
函数式编程—-Functional Programming,是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因
此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语
言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。
特点:特点: 允许把函数本身作为参数传入另一个函数,还允许返回一个函数
Python不是纯函数式编程语言不是纯函数式编程语言
高阶函数(高阶函数(Higher-order function))
变量可以指向函数,如f = abs ,此时把函数abs赋值给了变量f
同时,可以通过该变量来调用这个函数,如:
f = abs
f(-10)
10
函数名也是变量
函数名其实就是指向函数的变量函数名其实就是指向函数的变量,故函数名可以看成变量,
如:abs = 10,此时就无法调用abs(-10)这个函数了
传入函数:既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之
为高阶函数。
一个最简单的高阶函数:
def add(x,y,f)
return f(x)+f(y)
add(-5,6,abs) #调用
小结小结
把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。
map/reduce
1.map()
map()函数接收两个参数,一个是函数,一个是Iterable。
map()将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回
如:
函数:f(x)=x^2
list:[1,2,3,4,5,6,7,8,9] 把函数作用在list上,用map()实现:
def f(x):
return x*x
r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) #调用
list(r)
一行程序调用:一行程序调用:
list( map(f, Iterable))
2. reduce()
reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做
累积计算
效果:
reduce(f,[x1,x2,x3,x4])=f(f(f(x1,x2),x3),x4)
例子:
#序列求和
from functools import reduce
def add(x , y):
return x + y
#转换整数
def fn(x , y)
return x * 10 + y
reduce(add,[1,3,5,7,9]) #调用