Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x python在运行时支持decorator吗?_Python 3.x_Decorator - Fatal编程技术网

Python 3.x python在运行时支持decorator吗?

Python 3.x python在运行时支持decorator吗?,python-3.x,decorator,Python 3.x,Decorator,python的装饰器是一种甜食。我用它来宏一个函数定义,像这样 @logger(level="debug") foo(var) 或 它们将foo函数转换为解析时间,类似于宏。但我正在寻求在运行时使用装饰的自由 foo(var) 或者(注意-在执行foo()时应用decorator,而不是定义foo()) Q1)python是否正式给予这种自由?我不喜欢使用变通方法,因为我将来会添加/使用更多的装饰器 问题2)如果不是,以下是实现自由的直接方法吗?如何处理*args和**kwargs temp

python的装饰器是一种甜食。我用它来宏一个函数定义,像这样

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

它们将foo函数转换为解析时间,类似于宏。但我正在寻求在运行时使用装饰的自由

foo(var)
或者(注意-在执行foo()时应用decorator,而不是定义foo()

Q1)python是否正式给予这种自由?我不喜欢使用变通方法,因为我将来会添加/使用更多的装饰器

问题2)如果不是,以下是实现自由的直接方法吗?如何处理*args和**kwargs

temp_foo = logger( level="debug", repeat(5, foo, *args) )
temp_foo(var)
问题3)python是否建议支持运行时装饰器?或者可能有一些想法


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

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

修饰符在运行时用Python进行评估:可能不是用Java。我以前读过739654。我应该对运行时进行更具体的解释。我期望的运行时是执行函数foo(),而不是定义它。
temp_foo = logger( level="debug", repeat(5, foo, *args) )
temp_foo(var)
logger(level="debug")(repeat(5)(foo))(var)