Как преобразовать текущую функцию в переменную?

Как я могу получить переменную, содержащую функцию, выполняемую в настоящий момент в 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 или чего-то подобного.

32
задан martineau 3 December 2018 в 18:18
поделиться