【问题标题】:C Preprocessor Macro equivalent for Python相当于 Python 的 C 预处理器宏
【发布时间】:2016-07-29 06:02:29
【问题描述】:

我用来在 C 中定义宏(不仅仅是常量)

#define loop(i,a,b) for(i=a; i<b; ++i)
#define long_f(a,b,c) (a*0.123 + a*b*5.6 - 0.235*c + 7.23*c - 5*a*a + 1.5)

有没有办法在 python 中使用 preprocess 而不是函数?

*通过 preprocess 我的意思是在运行代码之前替换定义的出现(实际上不是整个代码,而是其余代码,因为它是代码的一部分,我猜它将在运行时替换所有内容)。

如果有,值得吗?运行时间会有显着差异吗?

【问题讨论】:

  • 传统上,C 预处理器是一个单独的程序,在大多数类似 POSIX 的系统中,它仍然可以作为cpp 使用。当然还有许多其他可用的预处理器,M4 是当今最引人注目的。如果您稍微搜索一下,还有其他类似 C 的预处理器。 但是,如果您使用预处理器和类似的宏,大多数 Python 程序员都会对您和您的代码皱眉。实际上,大多数 C 程序员也是如此。
  • Python 是一种解释型语言,没有类似 C 的预处理器在编译前替换标记的概念。

标签: python macros preprocessor


【解决方案1】:

有办法吗?是的。总有办法的。你应该这样做吗?应该不会吧。

只需定义一个执行您想要的功能的函数。如果您只是担心代码会变得很长并且想要单行代码,则可以使用 lambda 函数。

long_f = lambda a,b,c: a*0.123 + a*b*5.6 - 0.235*c + 7.23*c - 5*a*a + 1.5
long_f(1,2,3) == 28.808

当然,您的第一个示例在 Python 中已经更漂亮了。

for i in range(a,b):
    ...

编辑:为了完整起见,我应该按要求回答问题。如果您绝对必须预处理您的 Python 代码,您可以使用任何设计用于模板之类的编程语言,例如网页。例如,我听说 PHP 用于预处理代码。您编写代码而不是 HTML。当你想要预处理某些东西时,你可以做你的 PHP 块。

【讨论】:

    【解决方案2】:

    好吧,如果您要执行一些可以提前执行的非常困难的计算,那么这也许是有道理的:通常用户更喜欢快速程序而不是慢速程序。

    但是,就“原始性能”(即算术计算的速度)而言,恐怕 python 不是一个好的选择。至少如果我们谈论标准的 Python 实现,称为 CPython。

    或者,您可以检查其他变体:

    • PyPy。这是纯 Python 中的另一种 Python 实现。得益于 JIT 编译器,它提供了更好的性能,但需要更多的内存。
    • Cython。这是对 Python 的扩展,它允许人们[方便地]为代码的性能关键部分创建可编译的 sn-ps。
    • 使用您喜欢的任何外部预处理器。 M4FilePP 是我首先想到的,但数量很多。

    【讨论】:

      猜你喜欢
      • 2020-02-09
      • 2011-01-26
      • 1970-01-01
      • 2012-11-16
      • 2016-12-14
      • 2011-03-26
      • 2018-01-04
      • 2016-09-16
      • 1970-01-01
      相关资源
      最近更新 更多