如何并行编写 2 Python 个装饰器
How to write 2 Python decorators in parellel
我正在阅读 Python 装饰器,如 here 所述。如果将 decorator_1 放在 func() 上方,则函数 func() 会被装饰,如下所示
@decorator_1
def func():
return
如果我想并行构建两个装饰器 decorator_1 和 decorator_2,它们都使用 func() 使用 @ 的语法怎么办?我该怎么做?我不能像下面那样将一个堆叠在另一个之上,因为那样会使它成为一个复合装饰器。
@decorator_2
@decorator_1
def func():
return
我知道我可以省去 @ 语法而只写
func1 = decorator_1(func)
func2 = decorator_2(func)
为了实现我在一个函数 func() 上并行构造两个装饰器的目标,但我想知道是否还有其他方法仍然可以使用 @ 语法来实现我的目标。
装饰器语法
@deco
def f(...):
...
是
的缩写
def f(...):
...
f = deco(f)
和
@deco2
@deco1
def f(...):
...
是
的缩写
def f(...):
...
f = deco2(deco1(f))
特别是,外部装饰器只接收内部装饰器的输出,而不是最初装饰的函数(或class)。此外,分配的唯一名称是用于原始函数定义的名称。
如果出于某种原因您决定通过装饰器语法来执行此操作,那么您可以合理获得的最接近的是
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_f), deco2(original_f))
,其中 original_f
是由原始函数定义定义的函数。然后你可以解压元组:
f1, f2 = f
我正在阅读 Python 装饰器,如 here 所述。如果将 decorator_1 放在 func() 上方,则函数 func() 会被装饰,如下所示
@decorator_1
def func():
return
如果我想并行构建两个装饰器 decorator_1 和 decorator_2,它们都使用 func() 使用 @ 的语法怎么办?我该怎么做?我不能像下面那样将一个堆叠在另一个之上,因为那样会使它成为一个复合装饰器。
@decorator_2
@decorator_1
def func():
return
我知道我可以省去 @ 语法而只写
func1 = decorator_1(func)
func2 = decorator_2(func)
为了实现我在一个函数 func() 上并行构造两个装饰器的目标,但我想知道是否还有其他方法仍然可以使用 @ 语法来实现我的目标。
装饰器语法
@deco
def f(...):
...
是
的缩写def f(...):
...
f = deco(f)
和
@deco2
@deco1
def f(...):
...
是
的缩写def f(...):
...
f = deco2(deco1(f))
特别是,外部装饰器只接收内部装饰器的输出,而不是最初装饰的函数(或class)。此外,分配的唯一名称是用于原始函数定义的名称。
如果出于某种原因您决定通过装饰器语法来执行此操作,那么您可以合理获得的最接近的是
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_f), deco2(original_f))
,其中 original_f
是由原始函数定义定义的函数。然后你可以解压元组:
f1, f2 = f