python函数的闭包和装饰器
闭包
1.嵌套函数
2.在内部函数引用了外部函数变量
3.函数外层返回内部函数的引用
# 函数嵌套
def outer():
x=1
#######
def inner():
nonlocal x#闭包函数引用上层函数中的局部变量
x+=10
print(x)
return inner# 返回一个内部函数的引用
#########
x=outer()# outer函数调用
print(type(x))
x()
outer()()
>> <class 'function'>
11
11
装饰器
以@开头,装饰器是在函数调用之上的修饰器,在不改变项目原有代码的基础上,增加一些额外的功能
一个装饰器
# 定义一个函数
def wrapper(func):
def inner():
print('s')
func()
print('e')
return inner
@wrapper#装饰器
def un():#数据库其他资源的释放
print('un...')
@wrapper
def test():
print('test...')
func()
test()
>> s
func...
e
s
test...
e
多个装饰器
开始: 自上而下
结束: 自下而上
def wrapper(func):
def inner():
print('*'*5)
func()
print('+'*5)
return inner
def ball(vn):
def inner():
print('*'*5)
vn()
print('+'*5)
return inner()
@wrapper#装饰器
def func():#数据库其他资源的释放
print('func...')
@ball
def test():
print('test...')
>> *****
test...
+++++
*****
func...
+++++