Python,用“with”语句包装函数的装饰器

Avi*_*ida 2 python python-3.x

在 Python 3.7+ 中,有没有办法创建一个采用类似方法的装饰器:

@some_dec_fun
def fun():
    ...
Run Code Online (Sandbox Code Playgroud)

并转换并执行类似的东西

def fun():
    with some_dec_fun():
        ...
Run Code Online (Sandbox Code Playgroud)

mat*_*tch 5

您不能使用装饰器“进入”另一个函数。但是您可以使用装饰器在特定上下文中执行“整个”装饰函数。例如,以下将some_function在上下文管理器中执行该函数some_context_manager

def my_decorator(func):
    def wrap():
      with some_context_manager():
          func()
    return wrap()

@my_decorator
def some_function:
  ...
Run Code Online (Sandbox Code Playgroud)