Python装饰器本质250220
- 互联网
- 2025-08-24 19:36:02

定义一个函数,在不修改这个函数的代码的情况下,让函数执行前后会有新的内容加入 def func(): print("func") return def outer(): def inner(): print("new code before") func() print("new code after") return return inner func = outer()# 执行到这一步,func指向变为inner func()# 相当于执行inner(),而调用inner()时,打印before后,再调用第7行func(),就是又调用了inner(),如此反复,耗尽函数栈 上述的写法会变成死循环,在第11行相当于修改了func函数的指向,导致反复调用outer函数上述写法要改写 def func(): print("func") return [1, 2, 3] def outer(arg): def inner(): print("before") res = arg() print("after") return res return inner func = outer(func)# 经过outer包装为闭包,括号内的func还是指向原定义的函数,等号左边func是指向了inner,左右两个func是不同的 func()# 还是不能理解闭包的形式上述写法的逻辑是之前定义了一个函数,将这个函数包装一下,从而在不改变其最一开始定义的内容的情况下,再次调用这个函数(函数名相同),会在前和后添加其它逻辑与代码
Python装饰器本质250220由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Python装饰器本质250220”