В настоящее время я изучаю 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)':
ошибка: переопределение 'int doMath (int, int)' в строке 9
note: '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()
на своемсвоя? Как он мог решить сам, что я хочу второе определение, а не первое ?? Почему он допускает несколько определений под одним и тем же именем и одним и тем же количеством параметров ???
Или, точнее, возможно, вопрос может быть, почему мы не можем скомпилировать код Python, как мыможет в C ++ (по крайней мере, не в PyCharm или нескольких других, которых я знаю)? Потому что, если бы мы могли, он сначала скомпилировал бы и определил, что под одним именем есть два определения функций с одинаковым количеством параметров и, таким образом, он вообще не запускается. То же, что старомодный C.