一、函数式编程
抽象程度高,执行效率低
纯粹的函数式编程编写的函数没有变量,输入确定则输出确定,称之为没有副作用
允许把函数本身作为参数传入另一个函数,还允许返回一个函数
二、高阶函数
1、变量可以指向函数
abs是函数本身,abs(-10)是函数调用
函数本身可以赋值给变量
f=abs
f(-9)
9
2、函数名也是变量
函数名其实就是指向函数的(默认)变量
把abs指向其他对象,就无法再调用该函数
(需重启python交互环境)
3、传入函数
高阶函数:一个函数可以接收另一个函数作为参数
def add(x,y,f)
return f(x)+f(y)
调用时add(-5,6,abs)
三、map/reduce
(函数)
1、map
接收两个参数——函数和iterable
将函数依次作用到序列的每个元素,并将结果作为新的iterator返回
def f(x):
return x*x
r=map(f,[1,2,3])
list(r)
因为r是iterator惰性序列,需要list()将整个序列计算出来并返回一个list
2、reduce
把一个函数作用在一个序列上,将结果继续与序列的下一个元素做累积计算
reduce(f,[x1,x2,x3,x4])=f(f(f(x1,x2)x3)x4)
from functools import reduce
def fn(x,y)
reduce x*10+y
reduce(fn,[1,2,3,4])
1234