关于装饰器括号问题

2020-04-16  本文已影响0人  running_sheep

今天正好看到一个三层装饰器,显示方式是:@decorate(),但我记得两层的时候明明是不加括号的@decorate。有点不明白,就写了一个函数计时器的装饰器,测试一下。

两层的时候,加了()是会报错的,因为没给参数,如下:

那什么时候既可以加()又可以不加()呢,需要加一个判断,如下:

这说明,如果是@time_log(),那么传入的func=None,return wrapper,func就是@time_log()下面的myfunc;如果是@time_log,那么传入的func就是下面的myfunc,那么检查myfunc是否可调用,如果可以,return wrapper(myfunc)

上一篇下一篇

猜你喜欢

热点阅读