Хорошо написанный, и скомпилированный в -o3 код на си, как правило, будет быстрее и эффективнее аналогичного кода на питоне.
В вашем случае неизвестно, почему вы могли получить такие результаты (даже не сказано, какие)
А какой используется интерпретатор?
А как был скомпилирован код на си?
На одном и том же железе происходил запуск? Условия равны?
Чем print на питоне отличается от сишного printf?
Как вообще происходил замер? Было ли учтено время на запуск интерпретатора?
Сколько было замеров? Может в случае с си был аномально медленный прогон?
UPD: Короче хз, как вы там меряли, но вот мой вариант
Для C я использовал Tiny C compiler, чтобы дать питону фору (будет учитываться время на компиляцию), да и оптимизации тут будут не такие дикие, как в GCC
Чтобы не тестировать скорость вывода на экран - вывод я перенаправил в /dev/null (Хз что это за заклинание такое, но я его нашёл на
SO)
Запускал всё на WSL2 по одному разу, но в принципе результат очень даже стабилен.
Вот результат:
vabka@DESKTOP-7AFIA69:~/repos$ time (python3 test.py) 2>&1 1>/dev/null
real 0m0.381s
user 0m0.359s
sys 0m0.016s
vabka@DESKTOP-7AFIA69:~/repos$ time (tcc -run test.c) 2>&1 1>/dev/null
real 0m0.081s
user 0m0.047s
sys 0m0.031s
vabka@DESKTOP-7AFIA69:~/repos$ cat test.c
#include <stdio.h>
int main() {
int i = 0;
while(i < 1000000) {
printf("%d\n", i);
i++;
}
return 0;
}
vabka@DESKTOP-7AFIA69:~/repos$ cat test.py
i = 0
while i < 1000000:
print(i)
i += 1
vabka@DESKTOP-7AFIA69:~/repos$
Питон получился в 4 раза медленнее.
Вот ещё результат без /dev/null:
Для C:
real 0m58.757s
user 0m1.094s
sys 0m11.078s
Для питона:
real 1m1.762s
user 0m2.953s
sys 0m13.594s
Результат тоже хуже, но тут очень много времени тратится на вывод в консоль, по тому разница почти не видна.