使用ast的python宏

karnickel的Python项目详细描述


“这不是普通的兔子……”

这是什么?

Karnickel是一个小型库,允许您使用宏(类似于 在python代码中。简而言之,宏允许您插入代码 (宏definition)位于代码中的不同点(宏call)。 它不同于调用函数,因为代码是在之前插入的。 甚至是编译的。

(“karnicket”是德语中的“rabbit”,还有一个凶残的杀手 “Python与圣杯”中的兔子,最好不要打扰……

使用

使用Python2.6+。可以在任何模块中放置宏。宏定义是 python函数,如下:

from karnickel import macro

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

不支持可选参数。

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

要使用宏,必须安装导入挂钩:

import karnickel
karnickel.install_hook()

然后,您可以导入使用如下宏的模块:

from module.__macros__ import macro1, macro2

也就是说,将.__macros__附加到包含 宏。只支持from-导入。

用法取决于宏类型:

  • 表达式宏可以在任何地方用作表达式。提出论点 在宏参数的地方。

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

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

    with macroname(arg1, arg2):
        body
    

    参数放在宏参数的位置,主体放在 在宏定义中__body__的位置。

只要我能找到一个像样的文档工具,正确的文档就可能随之而来。

为什么?

为什么不呢?说真的,这是对python的演示 ast,特别是标准的ast模块和导入挂钩。另外,是 很有趣。

安装

使用setup.py

sudo python setup.py install

作者

乔治布兰德,georg@python.org>;

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将字符串拆分为带关键字的部分   删除数据库后未指定java数据源问题“url”属性   网络化java多人游戏连接   Java当新字符串等于旧字符串时,为什么substring()不创建新对象?   一个实例到多个bean的java注入   JavaSpringMVC验证错误消息   java总结if语句,并从另一个对象(如字符串[])读取if条件(动态if)   需要多个输入的Java IF语句   jsf如何选择正确的bean范围?   java将数据库值加载到组合框JSP,Hibernate   一次活动中的java 3布局   团队和球员反对Java的困难   java ActionListener如何知道按下了哪个按钮?