我想在下面的代码中引用的任何地方就地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 shell,并且我想访问其中的所有变量
locals().items()
(请参阅另一个问题)
这在 Python 中完全可能吗?让这个工作最简单的方法是什么?
请注意,该宏假定可以访问调用它的作用域的整个命名空间(即仅将代码MY_MACRO
放在函数中是行不通的)。另请注意,如果我放置MY_MACRO
在一个函数中,lineno
将输出错误的行号。