函数的引用,即为函数名不加括号,打印的时候返回函数对象地址
1.闭包(closure)
在外部函数中定义了一个内部函数(内部函数是闭包),并且内部函数能够读取到外部函数内的变量,这种函数我们就称为闭包
def outer(x):
def inner(y):
print(x+y)
return inner
outer()() ,结果是x+y
特性:
1)内部函数中对外部函数的变量引用
2)闭包无法修改外部函数的局部变量
3)闭包可以保存当前的运行环境(外部函数的变量/参数)
2.装饰器
装饰器本质就是闭包
装饰器作用:在不改变函数原有代码的基础上,添加额外的功能
引用方式
def gettime(func):
def inner(y):
begin = time.time()
func()
end = time.time()
return inner
@gettime
def test(self): #gettime(test),test就是参数func
pass
装饰器的应用场景:引入日志、函数执行时间统计、执行函数前预备处理、执行函数后清理功能、权限校验等场景、缓存、事务处理、数据清理、数据添加、附加功能等
python三种内置装饰器: @staticmethod、@classmethod 和 @property