使用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
项目详情
关闭
karnickel-0.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 293a0f467ed287ec8806b33e005bb1e83e2e4e281a60d8e45453c2eeafc41cf3 |
|
MD5 | 5539e0c4c1aa786d3be417d62cb7f055 |
|
BLAKE2b-256 | a51a05854c64bb07feeca077d4120aab9dd1273b3f368831393c86b20751fb2b |