装饰器 就是函数 功能是为其他函数添加附加功能
def timer(func):
def inner(*args,**kwargs):
print("执行装饰器")
return func(*args,**kwargs)
return inner
@使用装饰器
@timer
def test(l):
for i in range(l):
print(i)
test(100)
函数也可以成为对象
l = test
<function timer.<locals>.inner at 0x000001F0468FF950>
闭包
外部看不见内部调用的方法 也无法调用 但是结果是受内部方法影响的
def outer(name):
def inner(name):
print("inner"+name)
inner(name)
outer("a")
自己实现装饰器 无法返回参数 无法转递参数
def outer(func):
def inner():
print("执行装饰器")
func()
return inner
@outer
def test2(l):
for i in range(l):
print(i)
test(10)
执行装饰器
0
1
2
3
4
5
6
7
8
9
#使用
*args,**kwargs传入参数 func在执行*args,**kwargs运行返回 就是装饰器了 可以返回参数 可以传递参数
def outer(func):
def inner(*args,**kwargs):
print("执行装饰器")
return func(*args,**kwargs)
return inner
@outer
def test2(l):
for i in range(l):
print(i)
return l;
a = test2(10)
print(a)
print(a)