python是否在运行时支持装饰器?

时间:2014-02-13 10:28:01

标签: python-3.x decorator

蟒蛇的装饰是甜糖。我用它来宏这样的函数定义。

@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是否有提议支持运行时装饰器?或者可能有一些想法?

由于

1 个答案:

答案 0 :(得分:0)

装饰器语法,没有。但您仍然可以手动调用它们。最好只使用没有副作用的装饰器,即那些不会修改传递给它的函数的装饰器。

logger(level="debug")(repeat(5)(foo))(var)