首页 > 解决方案 > 为什么这个伪代码的输出在 Python 和 C++ 中不同?

问题描述

我目前正在学习 python,之前我在 C++ 上工作。今天我在看一个关于 Python 概念的教程,我看到了这段代码,虽然它在 Python 上运行良好,但根据我(或者更坦率地说,根据 C++)应该给出错误。


这是 C++ 代码,它给出了错误:(请先查看下面的输出)

#include<iostream>

int doMath(int a, int b){
    return a+b;
}

int doMath(int c, int d){
    return c*d;
}

int main(){
    std::cout<<doMath(3,4);
    return 0;
}

输出:

在函数'int doMath(int,int)'中:

错误:在第 9 行重新定义 'int doMath(int, int)'

注意:'int doMath(int, int)' 之前在第 5 行定义

=== 构建失败:1 个错误,0 个警告(0 分钟,0 秒)===


这是等效的 Python 代码:(请先查看下面的输出)

def doMath(a,b):
    return a+b

def doMath(c,d):
    return c*d

def main():
    print(doMath(3,4))

if __name__ == "__main__": main()

输出:

12

进程以退出代码 0 结束


那么为什么python会doMath()自行选择第二个函数定义呢?它怎么能自己决定我想要第二个定义而不是第一个?为什么它允许在同名和相同数量的参数下进行多个定义???


或者更准确地说,也许问题是,为什么我们不能像在 C++ 中那样编译 Python 代码(至少在 PyCharm 或我知道的其他少数人上不行)?因为如果可以的话,它会首先编译并确定一个名称下有两个函数定义具有相同数量的参数,因此根本不会运行。和老式的 C 一样。

标签: pycharm

解决方案


它们是非常不同的语言,因此它们的行为不同。

Python 没有函数重载,所以第二个定义简单地覆盖了第一个。

C++ 确实有重载,因此它试图将第二个定义视为重载。您不能使用与第一个具有相同参数的第二个定义重载函数,因此会引发错误。


推荐阅读