pycharm - 为什么这个伪代码的输出在 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 一样。
解决方案
它们是非常不同的语言,因此它们的行为不同。
Python 没有函数重载,所以第二个定义简单地覆盖了第一个。
C++ 确实有重载,因此它试图将第二个定义视为重载。您不能使用与第一个具有相同参数的第二个定义重载函数,因此会引发错误。
推荐阅读
- c++ - CoR vs simple if else 和基于矩阵的函数调用,其中链依赖于请求
- python - 在日期时间索引上减去具有不同粒度的数据框列
- google-smart-home - TemperatureSetting 特征模式和“自动”模式的问题
- logstash - 为具有不同结构的文件查找 grok 模式
- json - 如何使用 PL/SQL 循环遍历 json 响应?
- xamarin - 无法加载文件路径中包含特殊字符 (!@#) 的 pdf 文件。Webview Xamarin 表单
- qt - QT 套接字等待用户输入
- java - 如何使用 Java 在 SQL Server 中存储具有精确小数的 DateTime
- python - 处理 .csv 文件:错误:只能将整数标量数组转换为标量索引
- javascript - 错误 [ERR_PACKAGE_PATH_NOT_EXPORTED]:在@babel/helper-compilation-targets/package.json 中没有解决“导出”主要问题