我想在下面的代码中引用以下代码原位无论我在何处引用MY_MACRO
。将宏添加到Python
# 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的外壳wihthin宏观和我想访问所有变量
locals().items()
(见this other question)
在Python这是在所有可能的?什么是最简单的方法来实现它的工作?
请注意,宏观假设访问范围的整个命名空间中,这就是所谓的(即仅仅将代码MY_MACRO
在功能将无法正常工作)。另请注意,如果我将MY_MACRO
放入函数中,lineno
会输出错误的行号。
恩,你为什么不定义一个函数? – delnan 2013-03-27 21:32:47
@delnan请阅读OP中的“NOTE”。 – 2013-03-27 21:46:46
如果你想干涉框架,你可以去一个(或任何真正的数字)框架,以达到调用者的范围。这是假设你实际上有一个很好的理由来摆弄框架。还有跟踪功能(请参考文档),这可以减少侵入性。 – delnan 2013-03-27 21:56:34