Python宏:用例?

2024-05-23 22:05:39 发布

您现在位置:Python中文网/ 问答频道 /正文

如果Python有一个类似Lisp/Scheme的宏工具(类似于MetaPython),您将如何使用它?

如果您是一个Lisp/Scheme程序员,您使用宏的目的是什么(除了在Python中有清晰的语法并行的东西,比如while循环)?


Tags: 工具目的语法程序员schemelispwhilemetapython
3条回答

这是一个有点晚的答案,但是MacroPy是我的一个新项目,将宏引入Python。我们有一个相当详细的演示列表,所有这些都是需要宏来实现的用例,例如提供了一种非常简洁的声明类的方法:

@case
class Point(x, y)

p = Point(1, 2)
print p.x   # 1
print p     # Point(1, 2)

MacroPy已用于实现以下功能:

  • Case类,来自Scala的简单Algebraic Data Types
  • 函数编程世界中的模式匹配
  • 尾声优化
  • 类星体,一种快速操作程序片段的方法
  • 字符串插值,许多语言中的一个公共特性,和Pyxl。
  • 跟踪和智能断言
  • 从PINQ到SQLAlchemy,从C#到SQL的LINQ克隆
  • 来自Scala和Groovy的快速Lambdas
  • 解析器组合器,灵感来自Scala's

请查看链接页面以了解更多信息;我想我可以自信地说,我们演示的用例远远超过了迄今为止任何人在此线程上建议的任何用例=D

我相信宏与Python的文化背道而驰。Lisp中的宏允许big ball of mud方法;您可以重新定义语言,使其更适合您的问题域。相反,Pythonic代码使用Python最自然的内置特性来解决问题,而不是用另一种语言更自然的方式来解决问题。

宏本质上是不连音的。

lisp宏的一些示例:

  • ITERATE这是一个有趣且可扩展的循环工具
  • CL-YACC/FUCC是在编译时生成解析器的解析器生成器
  • CL-WHO允许使用静态和动态部分指定html文档
  • Parenscript这是一个javascript代码生成器
  • 各种简单的代码包装器,例如错误处理程序(我有一个执行代码的WITHGTK错误消息处理程序,如果发生未处理的错误,则显示GtkMessageDialog)、执行程序(例如,给定一个代码,在不同的线程中执行;我有一个在不同线程中执行代码的主线程内宏;PCall库使用宏包装代码同时执行)
  • 带有宏的GUI构建器(例如,指定widgets层次结构和widgets的属性,并有用于创建所有widgets的宏生成代码)
  • 在编译期间使用外部资源的代码生成器。E、 例如,处理C头并生成FFI代码的宏或基于数据库模式生成类定义的宏
  • 声明性外国金融机构。E、 例如,指定外部结构、函数及其参数类型,并使用宏生成相应的lisp结构、具有类型映射和封送处理代码的函数
  • 通用Lisp基于连续性的web框架使用宏将代码转换为CPS(连续传递样式)形式。

相关问题 更多 >