Python的C预处理器宏等效项

l0oc07j2  于 5个月前  发布在  Python
关注(0)|答案(4)|浏览(88)

我用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 而不是函数来实现这一点?

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

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

vtwuwzda

vtwuwzda1#

有办法吗?是的。总会有办法的。你应该这么做吗?可能不会。
只要定义一个函数就可以了。如果你只是担心代码变得很长,想要一行程序,你可以使用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块。

jjjwad0x

jjjwad0x2#

好吧,如果你要执行一些可以提前执行的非常困难的计算,那么,也许,这是有道理的:通常用户更喜欢快速的程序,而不是缓慢的程序。
但是,我担心python在“原始性能”方面不是一个好的选择,也就是说,算术计算的速度。至少如果我们谈论标准的python实现,称为CPython。
或者,您可以检查其他变体:

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

20jt8wwn3#

答案是否定的,在python中,你实际上不能像C,C++,PL/1,Assembler等那样包含“in-line/stream/whatever”代码。该指令的实现发生在初始宏/处理器/关键字扫描或编译器通过期间。它可以很容易地添加,并且有很多原因人们可能希望直接内联包含代码,而不是函数或模块。在多个类或函数定义中使用相同的代码片段。例如,在多个类中定义相同的GTK+元素是一件痛苦的事情。这种能力的缺乏与解释无关,因为它发生在语法分析之前。它不包括在解释脚本语言中,如Perl和Python,仅仅是因为开发人员不想使该功能可用。

0mkxixxg

0mkxixxg4#

import inspect

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

字符串

相关问题