在Python中使用宏替换,如C / C ++

时间:2018-03-15 03:18:45

标签: python

我们知道C / C ++有宏功能来进行文本替换,这里有一个例子:

#include <string>
#include <iostream>
using namespace std;

#define FIRST_NAME Print("Moon")
#define FAMILY_NAME Print("Sun")

string Print(string name)
{
    cout << name << endl;
    return name;
}

int main()
{
    string name = FIRST_NAME + FAMILY_NAME; 
    return 0;
}

正如您所看到的,FIRST_NAME和FAMILY_NAME是宏,它们将被Print()函数替换。

我的问题是Python有类似的功能吗?或者我该怎么做才能创建这种功能?

3 个答案:

答案 0 :(得分:0)

也许有点个人,但我会说出我要说的话:

使用宏已经在C ++中不被认为是一种好习惯,您可以使用函数或模板获得相同的性能和更好的编译器检查。减少重复副作用的风险,或者因为非1语句宏而破坏块。

因此,宏的剩余合法用途,特别是在C中,是元编程。例如,升压预处理器库。

在python中,没有硬类型,只有duck类型。 (如果它像鸭子一样吠得足够) 它是一种动态语言(与静态相比),并且即使不能完全消除,也可以减少对宏的需求。

Python有一种品味(一种哲学),它被称为pythonic,宏不是pythonic。只是不要使用它们。

在你的情况下,制作函数。

答案 1 :(得分:0)

在Python中,您几乎可以通过其元类(对象上常见的Python操作的自定义行为),运行时反射和运行时评估来实现几乎

另一方面,除非您确实需要,否则不建议采用这种方法,因为它会增加复杂性并破坏您“静态地”理解代码的能力。也就是说,除非您正在执行以下操作,否则请不要使用它们:

  • 动态代码生成
  • 设计基于Python的DSL
  • 某种框架,需要一些魔术才能使用户看起来最佳

当然,还可以对您的Python源代码应用任何类型的预处理程序,包括C语言,也包括Python脚本。

答案 2 :(得分:-2)

是的,python具有类似的功能,即赋值

def MyPrint(name):
    print(name)
    return name

FIRST_NAME = MyPrint("Moon")
FAMILY_NAME = MyPrint("Sun")

请注意,C ++也具有此功能。