|
|
1
12
这是一个有点晚的答案,但是 MacroPy 是我的一个将宏引入Python的新项目。我们有一个相当丰富的演示列表,所有这些都是需要宏来实现的用例,例如提供一种极其简洁的类声明方式:
MacroPy已被用于实现以下功能:
查看链接页面以了解更多信息;我想我可以自信地说,我们演示的用例远远超过了迄今为止任何人在这个线程=D上提出的任何建议 |
|
|
2
15
我认为宏与Python的文化背道而驰。Lisp中的宏允许 big ball of mud 宏本质上是非Python的。 |
|
|
3
13
lisp宏的一些示例:
|
|
|
4
6
有一个 mailing list posting ( archive.org mirror )这很好地解释了这一点。这篇文章是关于Perl的,但它同样适用于Python。 |
|
|
5
4
这是我遇到的一个现实世界的例子,对于宏或真正的元编程支持来说,这是微不足道的,但由于Python中没有这两者,因此必须使用CPython字节码操作: http://www.aminus.net/dejavu/chrome/common/doc/2.0a/html/intro.html#cpython 这就是在Common Lisp中使用常规宏和读取宏的组合来扩展语法来解决问题的方法(如果没有后者,也可以完成,但前者不行): http://clsql.b9.com/manual/csql-find.html Smalltalk使用闭包和元编程解决了同样的问题(Smalltalk是少数真正正确传递消息的单分派OO语言之一): http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg02096.html 在这里,我尝试在Common Lisp中实现Smalltalk方法,这很好地说明了后者对元编程的支持程度很低: http://carcaddar.blogspot.com/2009/04/closure-oriented-metaprogramming-via.html |
|
|
6
4
在lisp中,宏只是抽象概念的另一种方式。 这是一个用clojure编写的不完整光线跟踪器的示例:
如果你想对坐标为(i,j)的每个像素做点什么,比如,如果i是偶数,画一个黑色像素,你可以写:
如果没有宏,这是不可能的,因为@body可以表示内部的任何内容(每像素i j@body) 这样的事情在python中也是可能的。你需要使用装饰器。 你不能用lisp宏做所有能做的事情,但它们非常强大 查看此装饰器教程: http://www.artima.com/weblogs/viewpost.jsp?thread=240808 |
|
|
7
3
class factories 或 stripping logging 生产代码中的语句。 |
|
|
8
2
我认为Python不需要宏,因为它们有两个用途:
顺便说一句,我宁愿看到Lisp在Python中重启,也不愿看到宏。 |
|
|
9
2
我会用它来包装
|
|
|
10
1
目前,将功能添加到Python语言中的唯一方法是通过PEP(Python增强提案)。这可能很慢,并且在您想向语言添加仅对您的用例有用的功能的情况下对您没有帮助。
例如,
there's a PEP to add a do-while loop
PEP to add labelled break and continue 但这被拒绝了。如果带标签的break语句能让我的代码更清晰,我可以用宏来实现它们。
除了政治公众人物,我还想
我可以写:
我想要一个
我可以写:
这些将很容易实现为宏。更复杂、更有用的宏包括:
|
|
|
11
1
为了我自己的使用,我创建了一个Python模块(Espy),它允许使用参数、循环和条件代码生成进行宏定义: 您创建一个source.espy文件,然后启动相应的函数,然后生成source.py。 它允许使用以下语法:
相当于:
其他语法:
相当于:
此外,Espy有两个功能:“macro for”和“macro if”。举个例子:
完整的文档和免费下载可以在这里找到: http://elp.chronocv.fr
如果Python能在未来的版本中包含宏,它会变得更加令人印象深刻。 |
|
|
12
1
我想使用宏在python代码中启用sql语句。 - 从表1中选择* |
|
|
13
1
|
|
|
14
0
可能是如果你想在运行时获得源代码,比如用于调试(比如printf调试一个表达式的值及其名称,这样你就不必写两次)。 The only way I could think of to do it in python is to pass a string to eval. |
|
|
15
0
好吧,我想代替
写
然后
它更短,但仍然需要太多的字符。 |
|
|
16
0
来自C世界,我真的很感激能够高效地记录丰富的消息。而不是写作
使用宏,人们可以做类似的事情
|
|
|
17
0
|
|
TSG · 创建定义编译器变量并调用方法的C++宏 1 年前 |
|
Edward Falk · 你能比较C预处理器中的两个常量指针吗? 1 年前 |
|
|
ma1169 · 宏:不应忽略void值 1 年前 |
|
|
Bhargav Patil · 运算符的大小并尝试打印数组 1 年前 |
|
|
David Robie · VIM:寄存器中填充字符断点宏的有向图 2 年前 |
|
|
Sofia Zaiafarova · 定义宏并使用数据类型查找绝对值 2 年前 |
|
|
Daniel Muñoz · C[重复]中类宏函数的语法 2 年前 |
|
|
SupAl · 避免在没有宏的情况下构建对象 2 年前 |