def b(func):
def inner(*args, **kwargs):
print("start")
func(*args, **kwargs)
return inner
@b
def a():
print("yuanlai")
if __name__ == '__main__':
a()
- @b是ptyhon的语法糖果等同于a=b(a)
- 当你在函数上写上@b时候b函数就已经开始执行了并且改变了函数的引用
- 当你执行a()时候此时指向函数的引用不在是a函数而是b函数里面的inner函数
- b函数的参数是原来的a函数的引用,我们通过加括号执行原来a函数
上面代码运行结果为
start
yuanlai