适用于Python的C预处理器宏

Car*_*zón 5 python macros preprocessor

我习惯在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)
Run Code Online (Sandbox Code Playgroud)

有没有一种方法在python中使用预处理而不是函数?

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

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

phs*_*ron 6

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

只需定义一个可以执行您想要的功能的函数。如果您只是担心代码变得很长并且想要单行代码,则可以使用 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
Run Code Online (Sandbox Code Playgroud)

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

for i in range(a,b):
    ...
Run Code Online (Sandbox Code Playgroud)

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


use*_*253 5

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

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

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

  • 皮皮。这是纯 Python 中的替代 Python 实现。多亏了 JIT 编译器,它提供了更好的性能,但需要更多的内存。
  • 赛通。这是 Python 的扩展,它允许人们 [方便地] 创建可编译的代码片段,以实现代码的关键部分。
  • 使用您喜欢的任何外部预处理器。M4FilePP是我首先想到的,但它们很多。