Как я могу получить переменную, содержащую функцию, выполняемую в настоящий момент в Python? Мне не нужно имя функции. Я знаю, что могу использовать inspect.stack
, чтобы получить текущее имя функции. Мне нужен фактический вызываемый объект. Можно ли это сделать без использования inspect.stack
для получения имени функции, а затем eval
с именем для получения вызываемого объекта?
Изменить: У меня есть причина чтобы сделать это, но это даже отдаленно не годится. Я использую plac для анализа аргументов командной строки. Вы используете его, выполняя plac.call (main)
, который генерирует объект ArgumentParser из сигнатуры функции «main». Внутри «main», если есть проблема с аргументами, я хочу выйти с сообщением об ошибке, которое включает текст справки из объекта ArgumentParser, что означает, что мне нужно напрямую получить доступ к этому объекту, вызвав plac. parser_from (основной) .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 или чего-то подобного.