Это может быть слишком далеко, но в основном из любопытства.
Возможно ли иметь вызываемый объект (функцию/класс), который одновременно выполняет функции диспетчера контекста и декоратора:
def xxx(*args, **kw):
# or as a class
@xxx(foo, bar)
def im_decorated(a, b):
print('do the stuff')
with xxx(foo, bar):
print('do the stuff')