琢磨了好久,终于算是把装饰器搞明白的个大概
No BB, Show me the code.
def decor(*args, **kwargs): # 最外层接受注解的参数
def handle(f): # 第二层接受被包装的函数作为参数
print("args:" + str(args))
print("kwargs:" + str(kwargs))
def inner(*args2, **kwargs2): # 第三层接受被包装的函数的参数作为参数
print("args2:" + str(args2))
print("kwargs2" + str(kwargs2))
f(*args2, **kwargs2) # 如果不显式地调用被包装函数,被包装函数是不会执行的
return inner # 必须将函数作为返回值,否则将会出错,原因是作用域
return handle
@decor('dec', 'or', name='decor', name2='decor2')
def test(*args, **kwargs):
print(args)
print(kwargs)
pass
if __name__ == '__main__':
test('test', 'test2', nametest='test', nametest2='test2')
输出是:
args:('dec', 'or')
kwargs:{'name': 'decor', 'name2': 'decor2'}
args2:('test', 'test2')
kwargs2{'nametest': 'test', 'nametest2': 'test2'}
('test', 'test2')
{'nametest': 'test', 'nametest2': 'test2'}
不全正确,欢迎交流