首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中使用宏替换,如C/C++

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

Stack Overflow用户
提问于 2018-03-15 11:18:45
回答 3查看 1.3K关注 0票数 0

正如我们所知道的,C/C++具有宏函数来进行文本替换,下面是一个示例:

代码语言:javascript
运行
复制
#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_NAMEFAMILY_NAME都是宏,它们将被函数Print()替换。

我的问题是,Python是否有类似的特性?或者我能做些什么来创建这种特征?

EN

回答 3

Stack Overflow用户

发布于 2018-03-15 11:30:19

在C++中,使用宏并不被认为是一种好的做法。使用函数或模板,您可以获得相同的性能和更好的编译器检查。这些方法具有较低的重复副作用的风险,或者因为多语句宏而破坏bug的风险。

因此,宏的另一个合法用途是元编程,尤其是在C++中。例如,boost预处理器库。

在python中,没有硬类型,只有鸭子类型。(如果它叫起来像鸭子,那就足够了)。它是一种动态语言(与静态语言相比),减少了对宏的需求,如果不是完全消除的话。

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

在您的例子中,使用make函数。

票数 1
EN

Stack Overflow用户

发布于 2020-09-24 00:06:01

在Python中,你几乎可以通过它的元类(对象上常见Python操作的自定义行为)、运行时反射和运行时评估来实现几乎任何你想要的东西。

另一方面,除非你真的需要这种方法,否则这种方法是不被鼓励的,因为它会增加复杂性,并扼杀你“静态”理解代码的能力。也就是说,除非您正在执行以下操作,否则不要使用它们:

  • Dynamic code generation
  • Designing是一种基于Python的DSL
  • 某种框架,它需要一些魔法才能使用户看起来更好

当然,也可以对Python源代码应用任何类型的预处理器,当然包括C,也可以包括Python脚本。

票数 0
EN

Stack Overflow用户

发布于 2020-09-23 23:53:00

是的,python有一个类似的特性,赋值。

代码语言:javascript
运行
复制
def MyPrint(name):
    print(name)
    return name

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

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

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49291033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档