如何用并行语言编写2个Python装饰器
我正在阅读关于Python装饰器的介绍。如果将修饰符_1放在func()的上方,函数func()将被修饰,如下所示 如果我想并行构建两个decorator decorator_1和decorator_2,它们都使用func(),语法为@,该怎么办?我该怎么做?我不能像下面那样把一个叠在另一个上面,因为这样会使它成为复合装饰器如何用并行语言编写2个Python装饰器,python,python-decorators,Python,Python Decorators,我正在阅读关于Python装饰器的介绍。如果将修饰符_1放在func()的上方,函数func()将被修饰,如下所示 如果我想并行构建两个decorator decorator_1和decorator_2,它们都使用func(),语法为@,该怎么办?我该怎么做?我不能像下面那样把一个叠在另一个上面,因为这样会使它成为复合装饰器 @decorator_2 @decorator_1 def func(): return 我知道我可以省去@语法,只写 func1 = decorator_1(f
@decorator_2
@decorator_1
def func():
return
我知道我可以省去@语法,只写
func1 = decorator_1(func)
func2 = decorator_2(func)
为了实现我在一个函数func()上并行构造两个Decorator的目标,我想知道是否还有其他方法仍然使用@syntax来实现我的目标。Decorator syntax
@deco
def f(...):
...
是的缩写
def f(...):
...
f = deco(f)
def f(...):
...
f = deco2(deco1(f))
及
是的缩写
def f(...):
...
f = deco(f)
def f(...):
...
f = deco2(deco1(f))
特别是,外部装饰器只接收内部装饰器的输出,而不是最初装饰的函数(或类)。此外,指定的唯一名称是用于原始函数定义的名称
如果出于某种原因,您决定通过decorator语法来实现这一点,那么您可以合理地得到最接近的
def multidec(*decorators):
def inner_dec(f):
return tuple(dec(f) for dec in decorators)
return inner_dec
@multidec(deco1, deco2)
def f(...):
...
这将导致最终的f
是一个元组(deco1(original\u f),deco2(original\u f))
,其中original\u f
是由原始函数定义定义的函数。然后可以解压元组:
f1, f2 = f
装饰语法
@deco
def f(...):
...
是的缩写
def f(...):
...
f = deco(f)
def f(...):
...
f = deco2(deco1(f))
及
是的缩写
def f(...):
...
f = deco(f)
def f(...):
...
f = deco2(deco1(f))
特别是,外部装饰器只接收内部装饰器的输出,而不是最初装饰的函数(或类)。此外,指定的唯一名称是用于原始函数定义的名称
如果出于某种原因,您决定通过decorator语法来实现这一点,那么您可以合理地得到最接近的
def multidec(*decorators):
def inner_dec(f):
return tuple(dec(f) for dec in decorators)
return inner_dec
@multidec(deco1, deco2)
def f(...):
...
这将导致最终的f
是一个元组(deco1(original\u f),deco2(original\u f))
,其中original\u f
是由原始函数定义定义的函数。然后可以解压元组:
f1, f2 = f
不是真的,不。你能给出你想要实现的用例吗。。。不是在python机制方面,而是在高层次上。@ArunKalirajaBaskaran:我在问题的最后一段提到了。我只是编辑了我的问题,让它更清楚。请回顾。不是真的,不。你能给出你想要实现的用例吗。。。不是在python机制方面,而是在高层次上。@ArunKalirajaBaskaran:我在问题的最后一段提到了。我只是编辑了我的问题,让它更清楚。请复习。