Задать вопрос
@mkone112
Начинающий питонист.

Можно ли в функции определить что она вызвана в контексте with?

def in_with():
    # some magick

in_with()  # >> False
with open(...) as f:
    in_with()  # >> True
  • Вопрос задан
  • 128 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
desaki
@desaki
пишу ботов для телеги
Добавить print
Ответ написан
@twistfire92
Python backend developer
Почитайте про контекстные менеджеры. Что это, как с этим работать.
В качестве песочницы можете начать с такого кода:

class func:

    def __init__(self):
        self.condition = 'вне контекста'

    # функция описывает методы, вызываемые при старте контекстного менеджера
    # Возвращаемое значение уходит в переменную var в конструкции 'with ... as var:'
    def __enter__(self):
        self.condition = 'в контексте'
        return self

    # Метод вызываемый в завершении конструкции with или при ошибке после нее
    def __exit__(self, type, value, traceback):
        pass

    def __call__(self):
        print(f'Выполнение функции {self.condition}')



out_context = func()
out_context()

print('-'*40)

with func() as inside_context:
    inside_context()

Результат будет следующий:
Выполнение функции вне контекста
----------------------------------------
Выполнение функции в контексте
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы