IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

les performances de Python


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 23
    Points : 16
    Points
    16
    Par défaut les performances de Python
    Hey,
    J'apprends à programmer en python depuis peu avec le livre Apprendre Python 3 de Gérard Swimmen et je trouve que c'est un bon langage.
    Mais je vois souvent ou même de la bouche de certaines personnes Python n'est pas performant et efficace par rapport aux autres langages (compilés,...) pour des applications ou logiciels à installer sur un bureau.
    J'aimerais savoir si c'est fondé ou pas ?
    Devrais je voir vers autre langage pour les applications pour bureau ?

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Ceux qui disent que Python n'est pas performant sont surtout ceux qui ne connaissent pas bien le langage. De même que lorsqu'on dit que Python n'est qu'un langage de script alors qu'on peut faire avec des programmes complexes (graphiques, multimédias, gestion de base de données, réseau, etc...).

    En fait si la partie purement interprétée est déjà assez performante, Python donne la main rapidement à des modules écrits en C ou C++ qui s'exécutent en langage machine. C'est le cas pour le calcul scientifique, les bibliothèques graphiques, etc... ainsi que les modules personnels qu'on a trouvé pertinent de traduire en C ou C++.

    Une fois le programme Python au point, on peut le transformer en exécutable indépendant (avec pyinstaller, cx_freeze, ...) qui pourra être exécuté sur des PC qui n'ont pas Python installé (ou pas avec la bonne version). On peut même utiliser un "installeur" comme innosetup sous Windows, ou fabriquer un "paquet" sous Linux, et un utilisateur pourra installer le programme sur son PC sans savoir que c'est du Python!

    Un petit exemple de programme Python multimédia avec la bibliothèque graphique PyQt5 qui permet de jouer des radios internet sur son PC: http://python.jpvweb.com/python/mesr...pyqt5_radioweb.

    En ayant la facilité et la rapidité de développement de la partie interprétée, et la partie rapide des modules écrits en C ou C++, on a ainsi le "meilleur des deux mondes".

    Bien sûr, des applications critiques de type temps réel nécessiteront probablement un autre langage plus adapté.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par jiggyOne Voir le message
    J'aimerais savoir si c'est fondé ou pas ?
    Sûr que c'est fondé: un langage interprété sera toujours plus lent qu'un langage compilé (moderne).

    Mais dans la réalité, dès que vous allez programmer sérieusement vous allez utiliser Python pour "commander" des bibliothèques graphiques ou numériques écrites dans des langages comme C/C++ et qui seront, elles, compilées.

    Côté performances, la différence sera négligeable pour autant que vous sachiez déléguer le gros du boulot à ces bibliothèques là. Sinon, rien ne vous empêche de compiler un sous ensemble de vos scripts Python grâce à des bibliothèques comme Cython.

    Et s'il y a plein de solutions, cela ne doit pas vous faire négliger l'apprentissage d'autres langages que Python... mais attendez d'avoir un peu appris à programmer pour çà.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 23
    Points : 16
    Points
    16
    Par défaut limites de python
    quels sont les limites de python et des langages interprètes en général ?

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par jiggyOne Voir le message
    quels sont les limites de python et des langages interprètes en général ?
    Vous pourrez difficilement faire de la programmation système (mais certains langages compilés ne le peuvent pas non plus)... et la principale limite sera essentiellement (et pour un certain temps puisque vous débutez) dans vos compétences à faire avec.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jiggyOne Voir le message
    Python n'est pas performant et efficace par rapport aux autres langages (compilés,...)
    Il faut aussi voir ce qu'on attend d'un programme en terme de performances.

    Si tu veux faire de l'acquisition vidéo en temps réel, traiter le flux vidéo pour faire de la détection faciale, et afficher la vidéo avec des carrés autour des têtes, il faut effectivement un programme qui ne perd pas de temps pour limiter au maximum le décalage entre la réalité et la vidéo affichées par ton programme.

    Si tu veux faire une interface pour afficher les données météo de ta ville, tu t'en fiches sur le programme soit plus lent parce que tu utilises un langage interprété plutôt que compilé. Tu as la latence des requêtes sur un site web pour avoir les informations, les inconnues sur les performances sur le réseau. Alors si toutes les heures quand tu mets à jour ton affichage des données météo, ça met 10 secondes au lieu de 1, quelle différence ?

  7. #7
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    J'appuie le propos de Bktero : Performant c'est un mot à relativiser. Selon 2 critères principaux : la taille des données que tu dois manipuler ET le temps de réponse maximale toléré (temps réel ou non, délai, etc ...)

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 41
    Points : 81
    Points
    81
    Par défaut
    La question est aussi passionnante que récurente.
    Il est admis communément qu'un langage interprêté est plus lent qu'un langage compilé.
    Mais dans la pratique, on constate souvent que l'interpréteur ne fait pas grand chose de plus lourd qu'un code généré par un compilateur. Il traduit le code, certes, mais c'est instantané.
    Si l'on examine le byte code résultant, on constate qu'il s'agit surtout de manipulations de pile et de branchements dans le coeur du système.
    Si l'on reste sur des instructions basiques, et que l'on programme sans utiliser la puissance du langage, d'accord, c'est plus lent, de beaucoup.
    Par contre, si l'on utilise des instructions "puissantes", qui font beaucoup de travail en elle-même, alors la puissance du langage est fonction de son efficacité interne, qui est tout simplement celle d'un langage compilé.
    Rappelons que python est programmé en C. Je postule que dans bien des cas, un code python est plus rapide qu'un code équivalent en C.
    Essayez de faire une boucle en C qui fera la même chose qu'une liste en compréhension (une base de python), ce n'est pas certain que vous aurez un résultat plus rapide.
    Jetez un coup d'oeil sur le code source de python, vous verrez que c'est extrêmement bien optimisé.

    Je bavarde, mais pratiquons, ce sera plus parlant.

    Le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import dis
    def tst():
    	for x in range(100):
    		if int(x/2) == x/2:
    			print(x,end=' ')
    tst()
    dis.dis(tst)
    dont voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98   4           0 SETUP_LOOP              48 (to 50)
                  2 LOAD_GLOBAL              0 (range)
                  4 LOAD_CONST               1 (100)
                  6 CALL_FUNCTION            1
                  8 GET_ITER
            >>   10 FOR_ITER                36 (to 48)
                 12 STORE_FAST               0 (x)
     
      5          14 LOAD_GLOBAL              1 (int)
                 16 LOAD_FAST                0 (x)
                 18 LOAD_CONST               2 (2)
                 20 BINARY_TRUE_DIVIDE
                 22 CALL_FUNCTION            1
                 24 LOAD_FAST                0 (x)
                 26 LOAD_CONST               2 (2)
                 28 BINARY_TRUE_DIVIDE
                 30 COMPARE_OP               2 (==)
                 32 POP_JUMP_IF_FALSE       10
     
      6          34 LOAD_GLOBAL              2 (print)
                 36 LOAD_FAST                0 (x)
                 38 LOAD_CONST               3 (' ')
                 40 LOAD_CONST               4 (('end',))
                 42 CALL_FUNCTION_KW         2
                 44 POP_TOP
                 46 JUMP_ABSOLUTE           10
            >>   48 POP_BLOCK
            >>   50 LOAD_CONST               0 (None)
                 52 RETURN_VALUE
    Le ligne 26 "46 JUMP_ABSOLUTE" nous laisse supposer un branchement, et donc un code assez lent, car une bonne partie de ces instructions vont être exécutées autant de fois que d'itérations dans la boucle. C'est normal, ce code python est à peine digne d'un débutant.

    Par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def tst():
    	print([x for x in range(100) if int(x/2) == x/2])
    qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]
     11           0 LOAD_GLOBAL              0 (print)
                  2 LOAD_CONST               1 (<code object <listcomp> at 0x7f3762f7f8a0, file "lst.py", line 11>)
                  4 LOAD_CONST               2 ('tst2.<locals>.<listcomp>')
                  6 MAKE_FUNCTION            0
                  8 LOAD_GLOBAL              1 (range)
                 10 LOAD_CONST               3 (100)
                 12 CALL_FUNCTION            1
                 14 GET_ITER
                 16 CALL_FUNCTION            1
                 18 CALL_FUNCTION            1
                 20 POP_TOP
                 22 LOAD_CONST               0 (None)
                 24 RETURN_VALUE
    et semble montrer l'absence de tout branchement.
    J'en déduis que la liste en compréhension est gérée de façon optimum, en une fois, d'une façon qui serait peut-être difficile à faire aussi bien en C, car programmée une fois pour toute.

    Je suis tenté de conclure que la puissance du langage fait loi, et non pas son caractère compilé/interprêté, qui me paraît une opposition obsolète depuis bien longtemps déjà. En fait, ce genre de discussion avait lieu à propos de java dans les années 90 ; ceci ne nous rajeunit pas...

    Et sans donner dans le côté partisan, python est tellement fourni en modules ultra-puissants, que pour finir, je ne vois guère de langage aussi performant d'un point de vue global.

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2018
    Messages : 41
    Points : 81
    Points
    81
    Par défaut
    Bof, après un test rapide, ce que je raconte n'est pas vérifié.
    Je n'en reviens pas.

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par jmbain Voir le message
    Je bavarde, mais pratiquons, ce sera plus parlant.
    J'adore ce genre de fraicheur dans un discours

    Citation Envoyé par jmbain Voir le message
    print([x for x in range(100) if int(x/2) == x/2])
    Je pense que si on veut faire un test de perfs, on partira quand-même d'un code plausible. A mon avis, aucun habitué de Python écrira if int(x/2) == x/2 quand il peut écrire if x//2 == x/2 ou même if x%2 == 0...

    Citation Envoyé par jmbain Voir le message
    Bof, après un test rapide, ce que je raconte n'est pas vérifié.
    Je n'en reviens pas.
    Il n'y a rien de plus frustrant que d'avoir une théorie qui s'appuie sur un raisonnement correct et qui, donc, ne peut que se voir vérifiée... et qui ne l'est au final pas
    Malheureusement je pense que ton test a dû être compromis par certaines optimisations internes.

    Citation Envoyé par jiggyOne Voir le message
    J'aimerais savoir si c'est fondé ou pas ?
    Je me souviens de mon premier projet en Python. Un truc pas vraiment difficile en soi mais qui effectuait énormément de calculs. J'ai donc abordé, en bon débutant de ce langage, le projet sous forme classique (des tableaux, des boucles, des calculs).
    Au final, ça fonctionnait mais avec des données réelles (grosso-modo 60000 lignes de 8 colonnes) le bouzin mettait plus de 5mn pour donner un résultat.

    Ensuite avec l'expérience j'y suis revenu. En tentant des solutions diverses encore et encore. A la fin, je suis passé par sqlite pour avoir la puissance du requêtage SQL (parce qu'il me fallait parfois éliminer certaines lignes selon le choix de l'utilisateur donc je pouvais, en SQL, mettre mes lignes en table puis ne récupérer que celles dont la colonne X était à True) et le truc est descendu à 30 secondes. Et je n'ai pas tenté numpy que je ne connais pas mais d'après les echo, peut-être que je pourrais gagner encore (mais bon, le projet est fini donc...)

    Tout ça pour dire que oui, Python pur ok c'est lent. Mais Python + tout ce qui a été fait à côté et qu'on peut relier via un simple import sera quasiment aussi rapide qu'un compilé. Toutefois tout dépend au final de ce qu'on veut/peut mettre dans ce "quasiment"...
    Perso j'aime bien cette page et surtout cette conclusion "Il y a des tas de raisons de ne pas choisir Python bien entendu, mais probablement la meilleure raison de le choisir, c’est qu’il y a peu de chance de se planter."

    Citation Envoyé par jiggyOne Voir le message
    Devrais je voir vers autre langage pour les applications pour bureau ?
    Avant de réfléchir à ce qui ne peut pas se faire en Python, je te conseillerais peut-être d'abord t'intéresser à ce qui a été fait en Python...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    merci c'était bien illustrer.Mais c'était quoi le projet ?

  12. #12
    Membre éclairé Avatar de viper1094
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 570
    Points : 853
    Points
    853
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Je bavarde, mais pratiquons, ce sera plus parlant.
    J'adore ce genre de fraicheur dans un discours
    Hahaha elle est joli celle là.
    "C'est d'un ennui…"

    Shikamaru Nara

  13. #13
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    A mon avis, aucun habitué de Python écrira if int(x/2) == x/2 quand il peut écrire if x//2 == x/2 ou même if x%2 == 0...
    Bien sur que non, aucun dev python ne fait de choses comme cela.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Python 3.6.8 (default, Jan 14 2019, 11:02:34) [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
    >>> import dis
    >>> dis.dis("int(i/2) == i/2")
      1           0 LOAD_NAME                0 (int)
                  2 LOAD_NAME                1 (i)
                  4 LOAD_CONST               0 (2)
                  6 BINARY_TRUE_DIVIDE
                  8 CALL_FUNCTION            1
                 10 LOAD_NAME                1 (i)
                 12 LOAD_CONST               0 (2)
                 14 BINARY_TRUE_DIVIDE
                 16 COMPARE_OP               2 (==)
                 18 RETURN_VALUE
    >>> dis.dis("not i & 1")
      1           0 LOAD_NAME                0 (i)
                  2 LOAD_CONST               0 (1)
                  4 BINARY_AND
                  6 UNARY_NOT
                  8 RETURN_VALUE
    CQFD

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    aussi est-il important d'utiliser une machine virtuelle?

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Sacré VinsS. J'avais pas pensé à "&"
    Ou peut-être que j'ai écrit un code que je voulais inconsciemment adaptable à tout diviseur

    Citation Envoyé par jiggyOne Voir le message
    merci c'était bien illustrer.Mais c'était quoi le projet ?
    Analyse de signal

    Citation Envoyé par jiggyOne Voir le message
    aussi est-il important d'utiliser une machine virtuelle?
    Qu'entends-tu par "important" ? Ca dépend de ton besoin.
    Moi par exemple je code sous Linux mais faut que mes trucs fonctionnent sous W7/W10 donc oui j'utilise des machines virtuelles pour tester avant de déployer.
    Bref la virtualisation te permet de tester dans différents environnements mais ce n'est pas obligatoire pour simplement coder...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 109
    Points
    6 109
    Par défaut
    Citation Envoyé par jmbain Voir le message
    Rappelons que python est programmé en C. Je postule que dans bien des cas, un code python est plus rapide qu'un code équivalent en C.
    Plus rapide ?! Faut pas déconner non plus.

    Citation Envoyé par jmbain Voir le message
    Par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def tst():
    	print([x for x in range(100) if int(x/2) == x/2])
    qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]
     11           0 LOAD_GLOBAL              0 (print)
                  2 LOAD_CONST               1 (<code object <listcomp> at 0x7f3762f7f8a0, file "lst.py", line 11>)
                  4 LOAD_CONST               2 ('tst2.<locals>.<listcomp>')
                  6 MAKE_FUNCTION            0
                  8 LOAD_GLOBAL              1 (range)
                 10 LOAD_CONST               3 (100)
                 12 CALL_FUNCTION            1
                 14 GET_ITER
                 16 CALL_FUNCTION            1
                 18 CALL_FUNCTION            1
                 20 POP_TOP
                 22 LOAD_CONST               0 (None)
                 24 RETURN_VALUE
    et semble montrer l'absence de tout branchement.
    J'en déduis que la liste en compréhension est gérée de façon optimum, en une fois, d'une façon qui serait peut-être difficile à faire aussi bien en C, car programmée une fois pour toute.
    Citation Envoyé par jmbain Voir le message
    Bof, après un test rapide, ce que je raconte n'est pas vérifié.
    Je n'en reviens pas.
    Citation Envoyé par Sve@r Voir le message
    Il n'y a rien de plus frustrant que d'avoir une théorie qui s'appuie sur un raisonnement correct et qui, donc, ne peut que se voir vérifiée... et qui ne l'est au final pas
    Je crois que vous n'avez pas compris ce bytecode.

    Voici comment j'interprète ce bytecode :
    • La première instruction CALL_FUNCTION appelle range(100).
    • La deuxième instruction CALL_FUNCTION appelle une sous-fonction de la forme :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      def the_subfunction(result_of_range_100):
         return [x for x in result_of_range_100 if int(x/2) == x/2]
      sur le résultat de range(100). the_subfunction est la sous-fonction qui avait été construite et déposée dans la pile par les 3 instructions :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
                    2 LOAD_CONST               1 (<code object <listcomp> at 0x7f3762f7f8a0, file "lst.py", line 11>)
                    4 LOAD_CONST               2 ('tst2.<locals>.<listcomp>')
                    6 MAKE_FUNCTION            0
    • La troisième instruction CALL_FUNCTION appelle print sur le résultat précédent.

    Des branchements, il y en a à deux endroits :
    • Il y en a plusieurs dans la fonction que j'ai appelé the_subfunction. Quand j'ai testé dis.dis(tst), j'ai eu deux code successifs : celui qui correspond à la fonction tst puis celui qui correspond à la sous-fonction que j'ai appelée the_subfunction :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      >>> dis.dis(tst)
        2           0 LOAD_GLOBAL              0 (print)
                    2 LOAD_CONST               1 (<code object <listcomp> at 0x000002B7132F4810, file "<stdin>", line 2>)
                    4 LOAD_CONST               2 ('tst.<locals>.<listcomp>')
                    6 MAKE_FUNCTION            0
                    8 LOAD_GLOBAL              1 (range)
                   10 LOAD_CONST               3 (100)
                   12 CALL_FUNCTION            1
                   14 GET_ITER
                   16 CALL_FUNCTION            1
                   18 CALL_FUNCTION            1
                   20 POP_TOP
                   22 LOAD_CONST               0 (None)
                   24 RETURN_VALUE
       
      Disassembly of <code object <listcomp> at 0x000002B7132F4810, file "<stdin>", line 2>:
        2           0 BUILD_LIST               0
                    2 LOAD_FAST                0 (.0)
              >>    4 FOR_ITER                28 (to 34)
                    6 STORE_FAST               1 (x)
                    8 LOAD_GLOBAL              0 (int)
                   10 LOAD_FAST                1 (x)
                   12 LOAD_CONST               0 (2)
                   14 BINARY_TRUE_DIVIDE
                   16 CALL_FUNCTION            1
                   18 LOAD_FAST                1 (x)
                   20 LOAD_CONST               0 (2)
                   22 BINARY_TRUE_DIVIDE
                   24 COMPARE_OP               2 (==)
                   26 POP_JUMP_IF_FALSE        4
                   28 LOAD_FAST                1 (x)
                   30 LIST_APPEND              2
                   32 JUMP_ABSOLUTE            4
              >>   34 RETURN_VALUE
      >>>
      Dans ce bytecode, POP_JUMP_IF_FALSE correspond au saut du if int(x/2) == x/2. FOR_ITER gère le saut pour sortir de la boucle et JUMP_ABSOLUTE correspond au saut pour revenir au début de la boucle.
    • Il y a forcément des branchements dans l'appel de print sur la liste retournée par the_subfunction, car il y a forcément une boucle sur les éléments.

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Pour un blog, par exemple je voudrais utiliser un framework de Python soit Django soit Flask .Ou devrais opter pour du php pour me simplifier la tâche ?

  18. #18
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par jiggyOne Voir le message
    Ou devrais opter pour du php pour me simplifier la tâche ?
    Si vous maîtrisez déjà PHP, sûr que réaliser un projet codé avec PHP sera plus simple: la réponse à cette question dépend de ce que vous connaissez et avec quels langages frameworks vous vous sentez le plus à l'aise.

    Et si vous voulez réaliser un blog qui sorte un peu du lot (des blogs gratuits, c'est pas ce qui manque, vous pouvez même en créer sur developpez.com), il faudra maîtriser aussi HTML, CSS, JavaScript, protocoles réseaux, bases de données,...
    qui sont des domaines qui sont difficile à aborder sans savoir un minimum programmer.

    Si vous apprenez à programmer (accessoirement avec Python, car pour apprendre à programmer, il faut pratiquer et donc utiliser un langage de programmation) vos questions pourraient avoir du sens si devant les difficultés, la lenteur, les frustrations d'un apprentissage, vous vous demandiez s'il n'y a pas de solutions plus simple/rapide.

    Plus simple et plus rapide serait de demander de faire le boulot à un programmeur... i.e. quelqu'un qui a eu la patience d'apprendre et la chance de réaliser quelques projets significatifs proches de celui que vous voulez.

    Et si la seule chose qui vous intéresse est le résultat final, et qu'il sera plus à l'aise pour le coder en Java, C++ ou Ruby qu'est ce qui ferait souhaiter à ce que ce soit plutôt codé avec PHP ou avec Python?
    Est-ce que çà va apporter des fonctionnalités supplémentaires à l'utilisateur final?
    Est-ce que ce sera plus facile à maintenir parce que vous avez plus de compétences dans ces langages là?

    Tout çà sont des questions "non techniques": çà n'apporte rien à l'utilisateur final mais se rapportent à un contexte spécifique à chaque projet et qui n'a rien à voir avec les langages de programmation retenus.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/08/2016, 19h20
  2. Réponses: 0
    Dernier message: 08/06/2011, 22h57
  3. Les performances de python
    Par jkalzsmu dans le forum Général Python
    Réponses: 1
    Dernier message: 18/08/2008, 10h37
  4. Le calcul des stats dégrade les performances
    Par jo007 dans le forum Oracle
    Réponses: 18
    Dernier message: 15/02/2005, 09h42
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo