Pyrhon函数-装饰器第一部分250219
- 定义一个函数,在不修改这个函数的代码的情况下,让函数执行前后会有新的内容加入
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()#