函数式编程:容许把函数自己做为参数传入另外一个函数,还容许返回一个函数。python
1.高阶函数编程
一个函数能够接收另外一个函数做为参数,这种函数称为高阶函数闭包
def add(x,y,f):app
return f(x) + f(y)函数式编程
x = -5 、y = 六、 f = abs、 f(x) + f(y) = abs(-5) + abs(6) = 11函数
return 11spa
2.map/reducecode
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。做用为将一个函数的某些参数给固定住,返回一个新的函数,从而加强做用。