Получение имени функции вызывающей стороны в другой функции в Python? [дубликат]

Только что это всплыло после обновления до Xcode 10.2 ... один из моих модулей использует Swift. Исправлено было:

pod repo update
rm -rf Pods
pod install
110
задан Joan Venge 22 May 2009 в 23:19
поделиться

2 ответа

Вы можете использовать модуль inspect , чтобы получить нужную информацию. Его метод stack возвращает список записей кадра.

  • Для Python 2 каждая запись кадра является списком. Третий элемент в каждой записи - имя вызывающего абонента. Вам нужно следующее:

     >>> import inspect
    >>> def f ():
    ... напечатать inspect.stack () [1] [3]
    ...
    >>> def g ():
    ... f ()
    ...
    >>> g ()
    грамм
    

  • Для Python 3.5+ каждая запись кадра представляет собой именованный кортеж , поэтому вам необходимо заменить

     print inspect.stack () [1] [3]
    

    с

     печатью (inspect.stack () [1] .function)
    

    в приведенном выше коде.

167
ответ дан 24 November 2019 в 03:14
поделиться

Примечание (июнь 2018 г.): сегодня я, вероятно, использовал бы inspect , см. Другие ответы

sys._getframe (1) .f_code.co_name , как в примере ниже:

>>> def foo():
...  global x
...  x = sys._getframe(1)
...
>>> def y(): foo()
...
>>> y()
>>> x.f_code.co_name
'y'
>>>  

Важное примечание: как видно из имени метода _getframe ( эй, он начинается с подчеркивания), это не метод API, на который следует бездумно полагаться.

13
ответ дан 24 November 2019 в 03:14
поделиться
Другие вопросы по тегам:

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