在这种情况下:
async def foo(f):
async def wrapper(*args, **kwargs):
return f(*args, **kwargs)
return wrapper
@foo
async def boo(*args, **kwargs):
pass
调用 foo 作为 boo 装饰器的装饰器是异步调用吗?
--第一次编辑: 另外,如何将协同程序的调用链作为装饰器来处理?
最佳答案
感谢@blacknght 的评论,考虑
def foo():
def wrapper(func):
@functools.wraps(func)
async def wrapped(*args):
# Some fancy foo stuff
return await func(*args)
return wrapped
return wrapper
和
def boo():
def wrapper(func):
@functools.wraps(func)
async def wrapped(*args):
# Some fancy boo stuff
return await func(*args)
return wrapped
return wrapper
作为两个装饰器,并且
@foo()
@boo()
async def work(*args):
pass
由于 foo
包装了 work
协程,关键是 await
func(*arg)
在两个装饰器中。
关于python - 使用协程作为装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42043226/