Пример использования contextlib.ExitStack
:
from contextlib import ExitStack
def files(stack, *args):
return [stack.enter_context(open(f, "w")) for f in args]
with ExitStack() as stack:
f1, f2 = files(stack, "a.txt", "b.txt")
...
или без оболочки
with ExitStack() as stack:
f1, f2 = [stack.enter_context(open(f, "w")) for f in ["a.txt", "b.txt"]]
...
Однако, когда вы знаете, сколько файлов нужно открыть раньше времени (и этонебольшое количество файлов), форма множественного менеджера оператора with
, как показано в Ответ Джорана Бизли проще.