7
votes

Des exemples réels pour montrer l'inefficacité de Python?

On dit toujours que Python n'est pas si efficace que d'autres langues telles que C / C ++, Java, etc. et il est également recommandé d'écrire la partie de goulot d'étranglement dans C. mais je n'ai jamais rencontré de tels problèmes, peut-être que c'est peut-être Parce que la plupart du temps, c'est la façon dont vous résolvez le problème plutôt que de l'efficacité de la langue.

Quelqu'un peut-il illustrer des circonstances réelles? Certains codes simples seront géniaux.


5 commentaires

Fondamentalement, Python est compilé au bytecode, puis interprété dans une machine virtuelle, ce qui le rend (en dehors d'autres raisons et architectes) plus lentement que les langues comme C. mais ce n'est qu'une petite partie de la réponse ...


Autre que les réponses claires fournies ici, vous pouvez également consulter PYPY , qui serait beaucoup plus rapide que la normale interprète dans divers cas d'utilisation.


J'ai écrit une fois un programme à Python, qui a pris 2000 échantillons d'un fichier dans quelque chose comme 2 secondes. Ensuite, je l'ai réécrit en C ++ et il a fallu des échantillons de 2000000 en moins de 2 secondes.


Efficace : Atteindre une productivité maximale avec un effort ou une dépense minimum gaspillé . Votre question a une intention mixte et vous confondez des performances brutes d'algorithme / code avec des préoccupations de «efficacité» réelles. Comme vous le suggérez, C'est la façon dont vous résolvez le problème qui définit les paramètres de effculation dans une situation donnée.


Essayez d'écrire un programme de croupage de numéros en Python en premier sans, puis avec NUMPY, et vous verrez la différence. (Numpy est en grande partie des boucles C.)


3 Réponses :


1
votes

Il n'y a pas d'ensemble spécifique de circonstances dans lesquelles C ou C ++ gagnent. À peu près n'importe quel code Heavy CPU, vous écrivez en C ou C ++ fonctionnera plusieurs fois plus rapidement que le code Python équivalent.

Si vous n'avez pas remarqué, c'est simplement parce que, pour les problèmes que vous avez dû résoudre en python, la performance n'a jamais été un problème.


1 commentaires

Ne peut pas être d'accord plus. Cependant, ce que j'attends, d'autres exemples montrent que les goulots d'étranglement qui devraient vraiment être réécrites dans d'autres langues.




2
votes

Une comparaison pratique utilisant l'insertion Trier, comme vous le voyez voir C est beaucoup plus rapide. Notez que ce sont des tentatives de 1 à 1, dans le monde réel, vous utiliseriez simplement la sorte de Python qui utilise https://fr.wikipedia.org/wiki/timsort et est beaucoup plus efficace. Résultats:

python fort> p> xxx pré>

C fort> p> xxx pré>

Premier dans Python P>

#include <stdio.h>
#include <stdlib.h>

/*
    Compile with: 

    cc insertion-sort.c -o insertion-sort
*/
int main(int argc, char **argv) 
{
   int a[20] = {16, 7, 4, 10, 18, 15, 6, 12, 13, 5, 11, 14, 17, 8, 2, 9, 20, 19, 3, 1};
   int i, j, key;
   int len = 20;

   printf("Unsorted: [");
   for ( i = 0; i < len; i++ ) {
       printf(" %d ", a[i]);
   }
   printf("]\n");

   for ( j = 0 ; j < len ; j++ ) 
   {
       key = a[j];
       i = j - 1;
       while ( i >= 0 && a[i] > key ) {
           a[i + 1] = a[i];
           i = i - 1;
       }    
       a[i + 1] = key;
   }

   printf("Sorted: [");
   for ( i = 0; i < len; i++ ) {
       printf(" %d ", a[i]);
   }
   printf("]\n");
}


1 commentaires

Une comparaison vraiment juste inclurait un système de type dynamique personnalisé en C;)