Python的C预处理宏等价物

14

我在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
传统上,C预处理器是一个单独的程序,在大多数类POSIX系统中仍然可用作cpp。当然,现在有许多其他的预处理器可用,其中M4是最著名的。如果你搜索一下,还有其他类似于C的预处理器。然而,如果你使用预处理器和宏,大多数Python程序员和C程序员都会对你的代码不屑一顾。 - Some programmer dude
1
Python是一种解释型语言,没有类似于C语言预处理器在编译之前替换标记的概念。 - Jason De Arte
1
请查看 https://github.com/trentm/preprocess。 - asmaier
3个回答

10

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

只需定义一个执行所需操作的函数即可。如果您只关心代码变得非常冗长并且想要一行代码实现,可以使用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代码,您可以使用任何专门设计用于模板化Web页面等事物的编程语言。例如,我听说过PHP被用于预处理代码。您可以使用PHP块来写代码而不是HTML。当您需要进行预处理时,只需调用您的PHP块即可。


8

如果你需要进行一些事先可以处理的艰难计算,那么这样做可能是有意义的,因为通常用户更喜欢快速程序而不是慢速程序。

但是,恐怕在“原始性能”即算术计算速度方面,Python并不是一个很好的选择,至少如果我们谈论标准的Python实现,即CPython。

或者,你可以尝试其他变体:

  • PyPy。这是Python的另一种实现,纯Python编写。由于JIT编译器,它提供更好的性能,但需要更多的内存。
  • Cython。这是Python的扩展,允许创建可编译代码的高性能代码片段。
  • 使用你喜欢的任何外部预处理器。M4FilePP是我首先想到的,但还有很多其他选择。

-1
import inspect

frame = inspect.currentframe()
print(f"{frame.f_lineno}\tdebugtext")
l = lambda: frame.f_lineno
print(f"{l()}\tdebugtext")

1
回答需要支持信息 您的回答可以通过提供更多的支持信息来改进。请[编辑]以添加进一步的细节,例如引用或文档,以便他人可以确认您的回答是否正确。您可以在帮助中心找到关于如何撰写良好回答的更多信息。 - moken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接