我想调用以下代码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 shell,并且我想访问其中的所有变量
locals().items()
(see 这另一个问题 https://stackoverflow.com/questions/15669186/using-ipython-as-an-effective-debugger)
这在 Python 中可能吗?让它发挥作用的最简单方法是什么?
Please NOTE该宏假定可以访问调用它的范围的整个命名空间(即只是放置代码MY_MACRO
in 某个功能不起作用)。另请注意,如果我放置MY_MACRO
在一个函数中,lineno
会输出错误的行号。
MacroPy https://github.com/lihaoyi/macropy是我的一个项目,它将语法宏引入 Python。该项目只有 3 周的历史,但如果您查看链接,您会发现我们有一个非常酷的演示集合,您想要的功能绝对可以使用它来实现。
另一方面,Python 具有一些非常惊人的自省功能,因此我怀疑您可能能够纯粹使用该功能来完成您想要的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)