Часто участки кода требуется дополнять одними и теми же инструкциями. Например, для добавления времени исполнения строк или автоматического открытия и закрытия файла. Эти действия можно автоматизировать при помощи декоратора contextmanager из модуля contextlib.
Техника его применения заключается в декорировании некоторой функции, в которой выполняются необходимые вам повторяющиеся действия, а точкой входа для изменяемого кода является строка с инструкцией yield. Например, так можно создать контекст измерения времени:
Для задания контекста достаточно вызвать функцию в блоке инструкции with, куда и поместить новый код:
Бывает, что некоторые объекты из контекста требуется использовать в блоке с изменяемым кодом. Для этого укажите их после инструкции yield. Например, так создается контекст файла с инструкцией with (подобно известному способу):
А теперь запишем строку в файл новым способом: