Я хотел бы вызвать следующий код in-situ, где я ссылаюсь на MY_MACRO
в моем коде ниже.
# MY_MACRO
frameinfo = getframeinfo(currentframe())
msg = 'We are on file ' + frameinfo.filename + ' and line ' + str(frameinfo.lineno)
# Assumes access to namespace and the variables in which `MY_MACRO` is called.
current_state = locals().items()
Вот код, который использовал бы MY_MACRO
:
def some_function:
MY_MACRO
def some_other_function:
some_function()
MY_MACRO
class some_class:
def some_method:
MY_MACRO
В случае, если это помогает:
- Одной из причин, почему я хотел бы иметь эту способность, является то, что я хотел бы избежать повторения кода
MY_MACRO
везде, где он мне нужен. Наличие чего-то короткого и легкого было бы очень полезно. - Другая причина заключается в том, что я хочу встроить оболочку IPython в макрос, и я хотел бы иметь доступ ко всем переменным в
locals().items()
(см. этот другой вопрос)
Возможно ли это в Python? Каким будет самый простой способ заставить это работать?
Пожалуйста, ПРИМЕЧАНИЕ, что макрос предполагает доступ ко всему пространству имен области, в которой он вызвал (т.е. просто помещая код MY_MACRO
в функцию не работает). Также обратите внимание, что если я помещаю MY_MACRO
в функцию, lineno
выводит неверный номер строки.