高阶函数
定义
- 函数接受的参数是一个函数
- 函数的返回值为一个函数
- 满足以上2点中其中一个就是高阶函数
函数嵌套
定义
- 函数中def定义一个函数
- 嵌套会存在闭包, 其他情况不会有闭包(闭包闭的是变量)
装饰器
实质
- 装饰器 == 高阶函数 + 嵌套函数 + 闭包
- 虽然1中提到装饰器等于右边3个项, 右边3个项的相加的结果就是函数, 所以装饰器就是函数
实战(装饰器(无参)标准写法)
不借助Python装饰器实现装饰器
def wrapper(func): def inner(*args, **kwargs): start_time = time.time() res = func(*args, **kwargs) end_time = time.time() print("耗时%ds" % (end_time - start_time)) return res return inner def cal(l): res = 0 for i in l: res += i return res cal = wrapper(cal)
使用Python内置的装饰器
def wrapper(func): def inner(*args, **kwargs): start_time = time.time() res = func(*args, **kwargs) end_time = time.time() print("耗时 %d s" % (end_time - start_time)) return res return inner @wrapper def cal(l): res = 0 for i in l: res += i return res
标准无参装饰器写法
def my_func(func): def wrapper(*args, **kwargs): ret = func() return ret return wrapper @my_func def test(name, age): print(name) print(age)
标准有参装饰器写法
def my_func(msg): def my_wrapper(func): def wrapper(*args, **kwargs): print(msg)