Почему бы вам просто не отредактировать свой предыдущий ответ вместо создания нового?
могу получить переменную, которая содержит текущую выполняющуюся функцию в Python? Я не хочу имя функции. Я знаю, что могу использоватьinspect.stack
чтобы получить текущее имя функции. Я хочу фактический вызываемый объект. Можно ли это сделать без использованияinspect.stack
чтобы получить имя функции, а затемeval
имя, чтобы получить вызываемый объект?
Редактировать: У меня есть причина, чтобы сделать это, но это даже далеко не хорошая причина. я используюНОАК разобрать аргументы командной строки. Вы используете это, делая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, или чего-то подобного.