正如我们所知道的,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是否有类似的特性?或者我能做些什么来创建这种特征?
发布于 2018-03-15 11:30:19
在C++中,使用宏并不被认为是一种好的做法。使用函数或模板,您可以获得相同的性能和更好的编译器检查。这些方法具有较低的重复副作用的风险,或者因为多语句宏而破坏bug的风险。
因此,宏的另一个合法用途是元编程,尤其是在C++中。例如,boost预处理器库。
在python中,没有硬类型,只有鸭子类型。(如果它叫起来像鸭子,那就足够了)。它是一种动态语言(与静态语言相比),减少了对宏的需求,如果不是完全消除的话。
Python有一种品味(一种哲学),它被称为“Python”。宏不是pythonic类型的。只是不要用它们。
在您的例子中,使用make函数。
发布于 2020-09-24 00:06:01
在Python中,你几乎可以通过它的元类(对象上常见Python操作的自定义行为)、运行时反射和运行时评估来实现几乎任何你想要的东西。
另一方面,除非你真的需要这种方法,否则这种方法是不被鼓励的,因为它会增加复杂性,并扼杀你“静态”理解代码的能力。也就是说,除非您正在执行以下操作,否则不要使用它们:
当然,也可以对Python源代码应用任何类型的预处理器,当然包括C,也可以包括Python脚本。
发布于 2020-09-23 23:53:00
是的,python有一个类似的特性,赋值。
def MyPrint(name):
print(name)
return name
FIRST_NAME = MyPrint("Moon")
FAMILY_NAME = MyPrint("Sun")请注意,C++也具有此功能。
https://stackoverflow.com/questions/49291033
复制相似问题