Как я могу получить переменную, которая содержит текущую исполняемую функцию в Python? Мне не нужно имя функции. Я знаю, что могу использовать inspect.stack
для получения текущего имени функции. Я хочу фактический вызываемый объект. Можно ли это сделать, не используя inspect.stack
для получения имени функции, а затем eval
имя, чтобы получить вызываемый объект?
Изменить: У меня есть причина сделать это, но это даже не очень удачный вариант. Я использую plac для анализа аргументов командной строки. Вы используете его, выполнив plac.call(main)
, который генерирует объект ArgumentParser из сигнатуры функции "main" . Внутри "main" , если есть проблема с аргументами, я хочу выйти с сообщением об ошибке, которое включает текст справки из объекта ArgumentParser, что означает, что мне нужно напрямую обращаться к этому объекту, вызвав plac.parser_from(main).print_help()
. Было бы неплохо сказать: plac.parser_from(get_current_function()).print_help()
, так что я не полагаюсь на функцию, называемую "main" . Прямо сейчас, моя реализация "get_current_function" будет:
import inspect
def get_current_function():
return eval(inspect.stack()[1][3])
Но эта реализация зависит от функции, имеющей имя, которое, я полагаю, не слишком обременительно. Я никогда не буду делать plac.call(lambda ...)
.
В конечном итоге было бы более полезно попросить автора plac реализовать метод print_help для печати текста справки функции, которая была недавно вызвана с помощью plac или чего-то подобного.