允许把函数本身作为参数传入另一个参数,还允许返回一个函数
高阶函数:
函数可以赋值给变量,变量可以指向函数,相当于C++中的函数指针,函数名就是指向函数的变量
map(f, [1,2,3,4]):将传入的函数依次作用到序列的每个元素,结果作为Iterator返回
reduce(f, [1,2,3,4]):把函数作用在序列上,把结果和下一个元素继续做累积计算,必须接收2个参数
filter(is_odd, [1,2,3,4]):把传入的函数作用于每个元素,根据返回值True,False过滤
Sorted([1,2,3,4], key=abs):排序
函数可以作为返回值,实现闭包
匿名函数lambda:lambda x:x*x,只能有一个表达式,不能用return
装饰器:在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),本质上,decorator就是一个返回函数的高阶函数,相当于把函数又进行了一次封装
def logger(text):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
print("start call %s" % (func.__name__))
func_ret = func(*args, **kwargs)
print("end call %s" % (func.__name__))
return func_ret
return decorator
偏函数:
functools.partial的作用就是把一个函数的某些参数给固定住,设置默认值,返回一个新的函数,调用这个新函数会更简单
int2 = functools.partial(int, base=2)