@logger(level="debug")
foo(var)
或
@repeat(3)
foo(var)
它们将foo函数转换为解析时间,类似于宏。但我正在寻求在运行时使用装饰的自由。
foo(var)
或(注意 - 执行foo()时应用装饰器,而不是定义foo())
@logger(level="debug")
@repeat(5)
foo(var)
Q1)python是否正式提供这样的自由?我不喜欢使用变通方法,因为我将来会添加/使用更多装饰器。
Q2)如果没有,以下是实现自由的直接方式吗?如何处理* args和** kwargs?
temp_foo = logger( level="debug", repeat(5, foo, *args) )
temp_foo(var)
Q3)python是否有提议支持运行时装饰器?或者可能有一些想法?
由于
答案 0 :(得分:0)
装饰器语法,没有。但您仍然可以手动调用它们。最好只使用没有副作用的装饰器,即那些不会修改传递给它的函数的装饰器。
logger(level="debug")(repeat(5)(foo))(var)