2014-02-13 14 views
0

python的装饰者是一种甜蜜的糖。我用它来宏这样的函数定义。python是否支持运行时装饰器?

@logger(level="debug") 
foo(var) 

@repeat(3) 
foo(var) 

他们翻译foo的功能解析时间,宏观相似。但我正在寻求在运行时使用装饰的自由。

foo(var) 

或(注 - 在执行时富(),而不是定义富应用装饰()

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

Q1)是否蟒蛇给这样的自由正式?我不喜欢使用解决方法,因为我将来会添加/使用更多装饰器。 Q2)如果不是,下面是让自由发生的直接方式吗?如何处理* args和** kwargs?

temp_foo = logger(level="debug", repeat(5, foo, *args)) 
temp_foo(var) 

Q3)python是否有建议支持运行时装饰器?或者可能有一些想法?

谢谢

+0

装饰器在运行时在Python评价:http://stackoverflow.com/questions/739654/how-can-i-make-a-chain-of-function-decorators-in-python也许不在Java中。 – User

+0

我之前阅读过739654。我应该给出更具体的运行时解释。我期望的RUNTIME执行函数foo(),而不是定义它。 –

回答

0

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

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