浅谈几种简单的装饰器及其原理
不带参数的单层装饰器
程序一开始执行的时候便会自动的对test装饰相当于执行了test = outer(test)这条语句,所以>-----1-----<会在程序加载的时候就先打印当调用再test()的时候,test的引用已经指向了inner这个函数所以调用test()实际上是执行了inner,inner中执行完print('>-----2-----<')后,再去调用真正的test
下面的程序输出结果是:
>-----1-----<
>-----2-----<
hello world
def outer(fun):
print(">-----1-----<")
def inner(*args, **kwargs):
print('>-----2-----<')
return fun(*args, **kwargs)
return inner
@outer
def test():
my_str = 'hello world'
return my_str
def main():
print(test())
if __name__ == '__main__':
main()
带参数的装饰器