闭包:在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包
装饰器:比如要给不同的基础平台部门增加验证权限/引入日志/函数执行时间统计时要用到装饰器 因为函数尊重开放封闭原则(已实现的代码时不允许被修改的)
理解python装饰器 #想要理解Python中的装饰器,不得不先理解闭包(closure)这一概念。
# print_msg是外围函数#在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包
def print_msg():
msg = "I'm closure"
# printer是嵌套函数
def printer():
print(msg)
return printer
msg是一个局部变量,在print_msg函数执行之后应该就不会存在了。但是嵌套函数引用了这个变量,
将这个局部变量封闭在了嵌套函数中,这样就形成了一个闭包。
结合这个例子再看维基百科的解释,就清晰明了多了。闭包就是引用了自有变量的函数,
这个函数保存了执行的上下文,可以脱离原本的作用域独立存在。
下面再来看看装饰器
比如要给不同的基础平台部门增加验证权限/引入日志/函数执行时间统计时要用到
#装饰器演示 也叫修饰器 把函数的引用到参数传递到@的那个闭包函数里面去
def set_func(func):
def call_func():
print("---这是权限验证1----")
print("---这是权限验证2----")
func()
return call_func#这上面时个闭包
@set_func
#这是等于test1=set_func(test1)
def test1():
print("-----test1----")
test1()