Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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
如何用并行语言编写2个Python装饰器_Python_Python Decorators - Fatal编程技术网

如何用并行语言编写2个Python装饰器

如何用并行语言编写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

我正在阅读关于Python装饰器的介绍。如果将修饰符_1放在func()的上方,函数func()将被修饰,如下所示

如果我想并行构建两个decorator decorator_1和decorator_2,它们都使用func(),语法为@,该怎么办?我该怎么做?我不能像下面那样把一个叠在另一个上面,因为这样会使它成为复合装饰器

@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:我在问题的最后一段提到了。我只是编辑了我的问题,让它更清楚。请复习。