跳转到主要内容

使用AST的Python宏

项目描述

“它不是一只普通的兔子……”

这是什么?

卡尼克尔是一个小的库,允许你在Python代码中使用宏(类似于Lisp中的宏)。简单来说,宏允许你在代码的另一个位置(宏的调用)插入代码(宏的定义)。它与调用函数不同,代码是在编译之前插入的。

(“卡尼克尔”是德语中“兔子”的意思,“蒙提·派森与圣杯”中有一个恶意的杀手兔子,最好不要靠近……)

使用方法

使用Python 2.6+。你可以在任何模块中放置宏。宏定义是Python函数,如下所示

from karnickel import macro

@macro
def macroname(arg1, arg2):
     ... macro contents ...

不支持可选参数。

如果内容是单个表达式(没有return),则宏是表达式宏。否则,它是块宏。如果它只包含一个由__body__组成的语句,则它是带体的块宏。

为了使用宏,你必须安装导入钩子

import karnickel
karnickel.install_hook()

然后,你可以导入使用宏的模块,如下所示

from module.__macros__ import macro1, macro2

也就是说,将.__macros__追加到包含宏的模块名称中。仅支持from导入。

使用取决于宏类型

  • 表达式宏可以作为表达式在任何地方使用。参数被放入宏参数的位置。

  • 没有体的块宏只能用作表达式语句 - 即。

    macroname(arg1, arg2)
  • 带有体的块宏必须与with语句一起使用

    with macroname(arg1, arg2):
        body

    参数被放入宏参数的位置,而主体则被放入宏定义中的__body__位置。

一旦我能找到合适的文档工具,就会尽快提供适当的文档。

为什么?

为什么不呢?认真地说,这是一个用Python AST(特别是标准ast模块和导入钩子)能做什么的演示。此外,这也很有趣。

安装

使用setup.py

sudo python setup.py install

作者

Georg Brandl <georg@python.org>

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

karnickel-0.2.tar.gz (8.6 kB 查看哈希值)

上传时间 源代码

由以下支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页