Рассмотрим следующий код Python, который использует менеджер контекста для получения и освобождения ресурса:
from contextlib import contextmanager
@contextmanager
def res(i):
print(f'Opening resource {i}')
yield
print(f'Closing resource {i}')
Теперь предположим, что нам нужно использовать пару из этих ресурсов
with res(0), res(1), res(2):
print('Using resources.')
где внутренняя часть зависит от всех трех ресурсов, открытых одновременно. После выполнения приведенного выше кода мы получим ожидаемый результат:
Opening resource 0
Opening resource 1
Opening resource 2
Using resources.
Closing resource 2
Closing resource 1
Closing resource 0
Если вам нужно использовать еще больше ресурсов - res(0) ... res(10)
можно ли динамически генерировать, используя цикл for, эквивалентный псевдокоду ниже?
with res(0), res(1), ... , res(10):
print('Using resources.')