C的预处理器宏等效于Python

时间:2016-04-08 04:47:08

标签: 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)

有没有办法在python中使用预处理代替函数?

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

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

2 个答案:

答案 0 :(得分:4)

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

只需定义一个能够满足您需求的功能。如果你只是担心代码变得很长并且想要一个单行,你可以使用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块。

答案 1 :(得分:3)

好吧,如果你要进行一些可以提前执行的非常难的计算,那么,也许这是有道理的:通常用户对快速程序而不是慢速程序感到满意。

但是,当涉及到“原始性能”时,我担心python不是一个好的选择,即算术计算的速度。至少如果我们谈论标准的python实现,称为CPython。

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

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